假设我有如下所示的 YAML 文件:
FOO: somefoo
BAR: somebar
Run Code Online (Sandbox Code Playgroud)
我想将其(使用yq)转换为以下内容,以便我可以将内容源到环境变量中:
export BAR='somebar'
export FOO='somefoo'
Run Code Online (Sandbox Code Playgroud)
我可以jq通过首先将输入转换为 JSON 来完成此操作,但我似乎不知道如何yq仅使用它。(我使用的是yq4.x,<4.18)。
那么,具体来说,我该如何使用 来执行以下操作yq?
INPUT="FOO: somefoo
BAR: somebar"
echo "$INPUT" | yq e 'to_json' - | jq -r 'keys[] as $k | "export \($k)='\''\(.[$k])'\''"'
Run Code Online (Sandbox Code Playgroud)
您可以切换到 kislyuk 的yq,它在底层使用本机 jq。然后,您只需要to_entries访问键和值、字符串插值与标志相结合-r即可生成输出,并@sh转义以符合 shell 要求:
yq -r 'to_entries[] | "export \(.key)=\(.value | @sh)"'
Run Code Online (Sandbox Code Playgroud)
export FOO='somefoo'
export BAR='somebar'
Run Code Online (Sandbox Code Playgroud)