3

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

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

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

我该如何解决?

PS我的实际示例涉及 docker stop all 命令,看起来像

docker stop $(docker ps -q)

但我简化了问题。

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

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

所以 Ignacio Vazquez-Abrams 解决方案将不起作用

4

2 回答 2

6

单引号禁止所有替换。

ssh user@192.168.1.1 'echo $(uname -a)'
于 2015-09-11T12:25:22.303 回答
4

我找到了解决方案-

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

对我来说很奇怪,但是很有效,感谢 Ignacio Vazquez-Abrams 提供了这个过程“替代”的正确名称,我之前找不到 :)

于 2015-09-11T12:42:41.977 回答