在ssh上运行命令时遇到问题

时间:2016-03-16 22:23:28

标签: linux bash ssh centos7

此命令未按预期工作:

ssh root@<machineIP> -- sh -c "echo \$\(cat /tmp/testfile\) > /testfile"

我的目的是将/ tmp / testfile的内容复制到/ testfile。真的很简单。但我发现/ testfile中没有任何内容。创建文件(在它不存在的情况下)。

如果从远程服务器上的命令行运行,

echo命令可以正常工作(减去转义)。但是通过ssh运行它时不起作用。最初我实际上有一个更复杂的命令与#sed&#39;,但简化了没有做到的事情。

远程服务器和本地服务器都是CentOS7。

我发现我必须逃避$和()。这会给我带来麻烦吗?这不是运行此命令的正确方法吗?

1 个答案:

答案 0 :(得分:0)

ssh将获取所有命令参数,将它们连接到空格上,然后在远程shell中运行它。

这意味着正在执行的命令基本上是您用ssh替换echo后得到的:

$ echo sh -c "echo \$(cat /tmp/testfile) > /testfile"
sh -c echo $(cat /tmp/testfile) > /testfile

引用丢失,因此生成的命令等同于sh -c echo > /testfile,使其为空。

相反,只需要运行您想要运行的命令并将其包装在单引号中:

ssh root@host 'echo $(cat /tmp/testfile) > /testfile'

确保在复制文件时永远不要使用echo$()。我认为这是一个更好的替身。