如何编辑远程服务器上的JSON文件?添加元素时命令执行报错
解决远程服务器JSON文件添加元素的命令报错问题
我来帮你捋清楚问题出在哪,以及怎么快速解决~
错误原因分析
你遇到的bash: .docker/test2.json: No such file or directory错误,根源在于重定向符号>被本地Shell提前解析了。当你执行带>的ssh命令时,默认情况下,本地Shell会把>当成本地的输出重定向,尝试在你的本地机器创建.docker/test2.json文件,但本地可能没有这个目录,所以就报错了——而不是在远程服务器上执行这个重定向操作。
解决方案
方案1:修复原命令的重定向问题
把整个要在远程执行的命令用单引号包裹起来,这样所有Shell特殊字符(包括>和&&)都会完整传递到远程服务器的Shell中执行,不会被本地提前处理。修改后的命令如下:
ssh <test-server> 'jq '.key3 = "Value3"' .docker/test.json > .docker/test2.json && mv .docker/test2.json .docker/test.json'
记得把<test-server>替换成你实际的服务器地址或别名。
方案2:用jq的原地修改功能更简洁
jq自带了--in-place(简写-i)参数,可以直接原地修改原JSON文件,不需要创建临时文件再替换,既减少了步骤,也避免了临时文件相关的问题。命令如下:
ssh <test-server> 'jq -i '.key3 = "Value3"' .docker/test.json'
执行后,远程服务器上的.docker/test.json会直接更新为包含"key3": "Value3"的新内容,一步到位。
内容的提问来源于stack exchange,提问作者Bhavik Joshi
相关产品推荐
相关产品推荐

