我尝试获取由kubectl
另一个用户创建的 JSON 区域。
runuser -l username -c "kubectl get ing -A -o json | jq --arg namespace "default" -r '.items | map(select(.metadata.namespace==$namespace))'"
并得到
jq: error: syntax error, unexpected ')' (Unix shell quoting issues?) at <top-level>, line 1:
.items | map(select(.metadata.namespace==))
jq: 1 compile error
问题是表达式
jq
仅用双引号引起来,因为它是双引号字符串的一部分,而该字符串是命令的参数runuser
。因此,
jq
内部变量$namespace
会被 shell 误认为是 shell 变量,并且会扩展为空,因为在 shell 中它没有被设置为任何东西。这会导致表达式出现语法错误jq
。为了用尽可能少的按键来解决这个问题,请将
$
in转义$namespaces
为\$
。这将在 shell 中“隐藏”它:或者,使用获取您想要解析的 JSON,然后对其进行解析(这就是我要做的,以其他用户身份
runuser
运行是没有意义的):jq