将UNIX环境输出为JSON

Con*_*ace 9 json environment-variables jq

我想要一个unix单行程序,它将输出当前执行环境作为JSON结构,如:{"env-var":"env-value",... etc ...}

这种方式有效:

(echo "{"; printenv | sed 's/\"/\\\"/g' | sed -n 's|\(.*\)=\(.*\)|"\1"="\2"|p' | grep -v '^$' | paste -s -d"," -; echo "}")
Run Code Online (Sandbox Code Playgroud)

但有一些额外的行,如果环境值或变量中包含'='或换行符,我认为不会有效.

宁愿纯粹的bash/sh,但紧凑的python/perl/ruby​​/etc单行也会受到赞赏.

pea*_*eak 18

使用jq 1.5(例如jq 1.5rc2 - 请参阅http://stedolan.github.io/jq):

$ jq -n env
Run Code Online (Sandbox Code Playgroud)


Pat*_*pin 9

这对我有用:

python -c 'import json, os;print(json.dumps(dict(os.environ)))'
Run Code Online (Sandbox Code Playgroud)

这很简单; 主要的复杂功能是os.environ类似于dict的对象,但它实际上并不是一个字典,因此在将它提供给json序列化程序之前必须将其转换为dict.

在print语句周围添加括号使它可以在Python 2和3中工作,因此它应该适用于大多数*nix系统的可预见的未来(特别是因为Python默认出现在任何主要的发行版上).