고쳐 쓰다
이 명령을 사용하여 JSON을 전달할 수 있다는 것을 알았습니다.
command -j /dev/stdin <<< '{"key":"value"}'
그런데 전화하면 안 돼요.SSH.
ssh {target} 'command -j /dev/stdin <<< '{"key":"value"}''
JSON이 아닌 문자열로 전송되는 것 같나요? 이유를 아는 사람 있나요?
JSON 문자열을 옵션에 전달해야 하는 명령이 있는데 어떤 이유로 herestring
to 를 사용하여 전달해야 합니다 /dev/stdin
.
예
command -j /dev/stdin <<< '{"key":"value"}'
답변1
원격 명령의 일부로 이 문자열을 리디렉션할 필요가 없습니다. 리디렉션한 데이터는 ssh
원격 명령의 표준 입력으로 종료됩니다.
ssh remote 'some command' <<<'whatever string'
당신에 관한 한,
ssh target 'command -j /dev/stdin' <<<'{"key":"value"}'
그러나 이는 이미 JSON으로 인코딩된 key
것으로 가정합니다.value
JSON 구성 jq
(값이 쉘 변수에 저장되어 있다고 가정하여 값의 올바른 인코딩을 얻으려면 $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\\\"}''