如何通过SSH远程执行命令并解析JSON的room.number字段
问题解决方法
问题出在本地执行SSH命令时的引号转义错误,嵌套的引号被本地shell解析后,传到远程机器的jq命令已经变形,导致无法正确识别room.number字段。
可以通过以下两种方式修改命令:
方法1:正确转义双引号和单引号
使用'\''在单引号包裹的字符串中插入单引号,同时用\"转义双引号,确保远程机器接收到的jq命令完全正确:
ssh -o "StrictHostKeyChecking=no" -i /root/.ssh/id_rsa $ACCOUNT@$TARGET_IP -t 'sudo su - -c "jq -r '\''.data.\"room.number\"'\'' /tmp/ca.json.1"'
方法2:改用数组索引式的字段引用
把.data."room.number"改成.data["room.number"],减少双引号的使用,降低转义复杂度:
ssh -o "StrictHostKeyChecking=no" -i /root/.ssh/id_rsa $ACCOUNT@$TARGET_IP -t 'sudo su - -c "jq -r '\''.data[\"room.number\"]'\'' /tmp/ca.json.1"'
这两种方法都能让远程机器正确执行jq命令,返回1111的结果。
内容的提问来源于stack exchange,提问作者Spark1231
相关产品推荐
相关产品推荐

