【问题标题】:Output UNIX environment as JSON将 UNIX 环境输出为 JSON
【发布时间】:2015-08-12 22:03:38
【问题描述】:

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

这有点工作:

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

但有一些额外的行,我认为如果环境值或变量中包含“=”或换行符,则不会起作用。

更喜欢纯 bash/sh,但紧凑的 python / perl / ruby​​ / 等单线也将不胜感激。

【问题讨论】:

    标签: json environment-variables jq


    【解决方案1】:

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

    $ jq -n env
    

    【讨论】:

    • 想知道是否有人知道如何做到这一点,但只传递当前环境变量的一个子集?
    • 如果可以确定性地指定子集,在jq中实现将很容易。 jq 手册在stedolan.github.io/jq/manual
    • jq 合作的押韵/原因是什么?我尝试使用jq -n echo "foo",但没有成功……那么它如何识别env 命令?
    • env 是一个 jq 函数。比较:s=abc jq -n 'env.s';和:s=abc jq -n '$ENV.s'
    【解决方案2】:

    这对我有用:

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

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

    在 print 语句周围添加括号使其在 Python 2 和 3 中都可以工作,因此它应该可以在大多数 *nix 系统上工作(尤其是因为 Python 在任何主要发行版上都是默认提供的)。

    【讨论】:

    • 这也有效。由于荒谬的简洁性,我将使用 jq 答案,但这对于更常见的 UNIX 依赖环境有好处
    • 谢谢。根据您的回答,我写了一个small python snippet 来读取.env 文件并以json 格式输出其值。可能有更好的方法,但我需要这个很快:)
    猜你喜欢
    • 1970-01-01
    • 2017-07-22
    • 2021-04-18
    • 2018-07-08
    • 2021-11-04
    • 1970-01-01
    • 2011-01-28
    • 2021-05-27
    • 2016-08-08
    相关资源
    最近更新 更多