Add env builtin
This commit is contained in:
1 parent
d14fca0cc6
commit
e9a1de47b4
2 files changed
+30
-1
No files matched your search
@@ -1,7 +1,8 @@
|
|||||||
|
#include <assert.h>
|
||||||
|
#include <limits.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <assert.h>
|
|
||||||
#include "builtin.h"
|
#include "builtin.h"
|
||||||
#include "compile.h"
|
#include "compile.h"
|
||||||
#include "jq_parser.h"
|
#include "jq_parser.h"
|
||||||
@@ -575,6 +576,23 @@ static jv f_error(jv input, jv msg) {
|
|||||||
return jv_invalid_with_msg(msg);
|
return jv_invalid_with_msg(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern const char **environ;
|
||||||
|
|
||||||
|
static jv f_env(jv input) {
|
||||||
|
jv_free(input);
|
||||||
|
jv env = jv_object();
|
||||||
|
const char *var, *val;
|
||||||
|
for (const char **e = environ; *e != NULL; e++) {
|
||||||
|
var = e[0];
|
||||||
|
val = strchr(e[0], '=');
|
||||||
|
if (val == NULL)
|
||||||
|
env = jv_object_set(env, jv_string(var), jv_null());
|
||||||
|
else if (var - val < INT_MAX)
|
||||||
|
env = jv_object_set(env, jv_string_sized(var, val - var), jv_string(val + 1));
|
||||||
|
}
|
||||||
|
return env;
|
||||||
|
}
|
||||||
|
|
||||||
#define LIBM_DD(name) \
|
#define LIBM_DD(name) \
|
||||||
{(cfunction_ptr)f_ ## name, "_" #name, 1},
|
{(cfunction_ptr)f_ ## name, "_" #name, 1},
|
||||||
|
|
||||||
@@ -620,6 +638,7 @@ static const struct cfunction function_list[] = {
|
|||||||
{(cfunction_ptr)f_max_by_impl, "_max_by_impl", 2},
|
{(cfunction_ptr)f_max_by_impl, "_max_by_impl", 2},
|
||||||
{(cfunction_ptr)f_error, "error", 2},
|
{(cfunction_ptr)f_error, "error", 2},
|
||||||
{(cfunction_ptr)f_format, "format", 2},
|
{(cfunction_ptr)f_format, "format", 2},
|
||||||
|
{(cfunction_ptr)f_env, "env", 1},
|
||||||
};
|
};
|
||||||
#undef LIBM_DD
|
#undef LIBM_DD
|
||||||
|
|
||||||
|
|||||||
@@ -1172,6 +1172,16 @@ sections:
|
|||||||
input: '[[{"a":1}]]'
|
input: '[[{"a":1}]]'
|
||||||
output: ['1']
|
output: ['1']
|
||||||
|
|
||||||
|
- title: "`env`"
|
||||||
|
body: |
|
||||||
|
|
||||||
|
Outputs an object representing jq's environment.
|
||||||
|
|
||||||
|
examples:
|
||||||
|
- program: 'env.PAGER'
|
||||||
|
input: 'null'
|
||||||
|
output: ['"less"']
|
||||||
|
|
||||||
- title: "String interpolation - `\\(foo)`"
|
- title: "String interpolation - `\\(foo)`"
|
||||||
body: |
|
body: |
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user