/testfile" 我的目的是将/tmp/testfile 的内容复制到/-6ren">
gpt4 book ai didi

linux - 通过 ssh 运行命令时遇到问题

转载 作者:太空宇宙 更新时间:2023-11-04 12:54:55 25 4
gpt4 key购买 nike

此命令未按预期工作:

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

我的目的是将/tmp/testfile 的内容复制到/testfile。真的很简单。但是我发现/testfile 里面什么也没有。文件已创建(如果它不存在)。

如果从远程服务器上的命令行运行,echo 命令工作正常(减去转义符)。但是通过 ssh 运行它时不起作用。最初我实际上有一个更复杂的“sed”命令,但简化了无法解决的问题。

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

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

最佳答案

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$()。我假设这是更好的替代品。

关于linux - 通过 ssh 运行命令时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36048096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com