通过带有Here Document

时间:2015-09-11 12:19:56

标签: bash ssh heredoc subshell

我尝试通过ssh发送命令,如下所示:

ssh user@192.168.1.1 "echo $(uname -a)"

但我的问题是,$(uname -a)部分实际上创建了一个子shell并且不在192.168.1.1服务器上执行,而是在我的系统上执行此命令。

我该如何解决?

P.S。我的实际例子包括docker stop all命令,看起来像

docker stop $(docker ps -q)

但我简化了问题。

更新: 对不起,我过度简化了我的问题。我的命令使用Here Document(因为内部命令很复杂并且使用了很多不同的引号)

ssh user@192.168.1.1 <<SSHCOMMAND
  echo $(uname -a)
SSHCOMMAND

所以Ignacio Vazquez-Abrams解决方案无效

2 个答案:

答案 0 :(得分:4)

单引号禁止所有替换。

ssh user@192.168.1.1 'echo $(uname -a)'

答案 1 :(得分:2)

我找到了solution -

    SELECT * FROM pet WHERE name like 'test%' OR nickname like 'test'

对我来说很奇怪,但是很有效,感谢Ignacio Vazquez-Abrams这个过程的正确名称&#39;替换&#39;,我以前找不到:)