我有一个json格式的文件,位于远程机器/tmp及其上下文如下
{
"data": {
"room.number": "1111",
"name": "student",
"phone": "1234-5678"
},
"type": "XXX",
"car": "toyota"
}
我使用以下命令连接到远程并尝试解析该值。我可以得到name的值,但不能得到空间。数值成功。
当我直接在远程机器终端上运行命令时,两个命令都是工作的。
root@remote-machine:/tmp# jq -r '.data.name' /tmp/ca.json.1
student
root@remote-machine:/tmp# jq -r '.data."room.number"' /tmp/ca.json.1
1111
回到我的本地机器,房间。数字为空
root@local-machine:~# ssh -o "StrictHostKeyChecking=no" -i /root/.ssh/id_rsa $ACCOUNT@$TARGET_IP -t 'sudo su - -c "jq -r '.data.name' /tmp/ca.json.1"'
student
root@local-machine:~# 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"'
null
我应该如何修改我的命令,然后我可以得到空间。数量值?
您可以这样做:
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""
解释最初我们有以下命令
ssh [other-flags] -t "sudo su - -c "jq -r '.data.\"room.number\"' /tmp/ca.json.1""
因此ssh
调用双引号中的命令并替换所有转义字符。因此,"
变为"
,\
变为。因此,将执行的内部命令看起来像:
sudo su - -c "jq -r '.data."room.number"' /tmp/ca.json.1"
现在sudo再次调用双引号中的命令,因此转义字符再次被替换:"
更改为"
,最终执行的命令变为:
jq -r '.data."room.number"' /tmp/ca.json.1
这正是我们想要执行的命令!