输出 UNIX 环境为 JSON

Output UNIX environment as JSON

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

这有点管用:

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

但是有一些额外的行,我认为如果环境值或变量中有“=”或换行符,它们将不起作用。

更喜欢纯 bash/sh,但紧凑的 python / perl / ruby / 等单行代码也将受到赞赏。

这对我有用:

python -c 'import json, os;print(json.dumps(dict(os.environ)))'

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

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

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

$ jq -n env