【问题标题】:Execute bash command with calling subshell $() via ssh with Here Document [duplicate]使用 Here Document [重复] 通过 ssh 通过 ssh 调用 subshel​​l $() 来执行 bash 命令
【发布时间】:2015-12-08 00:15:38
【问题描述】:

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

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

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

我该如何解决?

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

docker stop $(docker ps -q)

但我简化了问题。

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

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

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

【问题讨论】:

    标签: bash ssh heredoc subshell


    【解决方案1】:

    单引号禁止全部替换。

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

    【讨论】:

    • 谢谢,您的解决方案运行良好,但我添加了更复杂的示例,更接近我的实际命令。
    【解决方案2】:

    我找到solution -

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

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

    【讨论】:

    • 参见“重定向”部分底部附近的“man sh”。这一切都记录在那里。
    猜你喜欢
    • 2018-04-14
    • 2014-11-24
    • 2014-04-07
    • 2020-09-30
    • 2014-01-28
    • 2011-09-19
    • 1970-01-01
    • 2013-08-24
    • 2016-06-29
    相关资源
    最近更新 更多