更新
我注意到我可以使用此命令传递 JSON
command -j /dev/stdin <<< '{"key":"value"}'
但是,如果我调用它,它就不起作用SSH。
ssh {target} 'command -j /dev/stdin <<< '{"key":"value"}''
看起来它是作为字符串而不是 JSON 发送的?有人知道为什么吗?
我有一个命令,需要将 JSON 字符串传递给选项,但由于某些原因,我需要使用 to 传递herestring
它/dev/stdin
。
例子
command -j /dev/stdin <<< '{"key":"value"}'
答案1
无需将此处字符串重定向作为远程命令的一部分。重定向到的数据ssh
最终将出现在远程命令的标准输入上:
ssh remote 'some command' <<<'whatever string'
就你而言,
ssh target 'command -j /dev/stdin' <<<'{"key":"value"}'
但这假设key
和都value
已经是 JSON 编码的。
构造 JSON jq
(为了获得值的正确编码,假设它保存在 shell 变量中$value
):
jq -nc --arg val "$value" '{ key: $val }' | ssh target 'command -j /dev/stdin'
或者,使用jo
编写 JSON 文档:
jo key="$value" | ssh target 'command -j /dev/stdin'
答案2
我想通了,当传递"
到 SSH 时,我需要使用\\\"
它来让它通过。所以下面的命令有效。
ssh {target} 'command -j /dev/stdin <<< '{\\\"key\\\":\\\"value\\\"}''