Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将UNIX环境输出为JSON_Json_Environment Variables_Jq - Fatal编程技术网

将UNIX环境输出为JSON

将UNIX环境输出为JSON,json,environment-variables,jq,Json,Environment Variables,Jq,我想要一个unix单行程序,它将当前的执行环境输出为JSON结构,如:{“env var”:“env value”,…等…} 这种方法很有效: (echo "{"; printenv | sed 's/\"/\\\"/g' | sed -n 's|\(.*\)=\(.*\)|"\1"="\2"|p' | grep -v '^$' | paste -s -d"," -; echo "}") 但是有一些额外的行,我认为如果环境值或变量中有“=”或换行符,那么这些行将不起作用 希望使用纯bash/s

我想要一个unix单行程序,它将当前的执行环境输出为JSON结构,如:{“env var”:“env value”,…等…}

这种方法很有效:

(echo "{"; printenv | sed 's/\"/\\\"/g' | sed -n 's|\(.*\)=\(.*\)|"\1"="\2"|p' | grep -v '^$' | paste -s -d"," -; echo "}")
但是有一些额外的行,我认为如果环境值或变量中有“=”或换行符,那么这些行将不起作用

希望使用纯bash/sh,但也希望使用紧凑的python/perl/ruby/etc一行程序。

这对我很有用:

python -c 'import json, os;print(json.dumps(dict(os.environ)))'
这很简单;主要的复杂之处在于,
os.environ
是一个类似dict的对象,但实际上它不是dict,因此在将其提供给json序列化程序之前,必须将其转换为dict

在print语句周围添加括号可以让它在Python2和Python3中工作,因此在大多数*nix系统上(特别是在任何主要发行版上默认使用Python的情况下),它在可预见的将来都会工作。

使用jq 1.5(例如jq 1.5rc2--请参阅):


这也奏效了。我将使用jq的答案,因为它的简洁可笑,但这对于更常见的UNIX依赖环境是有好处的。谢谢。根据您的回答,我编写了一个脚本来读取
.env
文件并以json格式输出其值。可能有更好的方法,但我很快就需要:)想知道是否有人知道怎么做,但只传递当前环境变量的子集?如果可以确定地指定子集,那么在jq中实现就很容易了。《jq手册》的主题是:与《代码》jq一起使用的押韵/原因是什么?我尝试使用
jq-n echo“foo”
,但没有成功……那么它如何识别
env
命令呢?
env
是一个jq函数。比较:
s=abcjq-n'env.s'
;和:
s=abc jq-n'$ENV.s'
$ jq -n env