更新

更新

更新

我注意到我可以使用此命令传递 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\\\"}''

相关内容