使用 Here Document 通过 ssh 调用子 shell $() 执行 bash 命令
Execute bash command with calling subshell $() via ssh with Here Document
我尝试通过 ssh 发送命令,如下所示:
ssh user@192.168.1.1 "echo $(uname -a)"
但我的问题是,$(uname -a)
部分实际上创建了一个子 shell 并且不是在 192.168.1.1 服务器上执行,而是在我执行此命令的系统上执行。
我该如何解决?
P.S。我的实际示例涉及 docker 停止所有命令,看起来像
docker stop $(docker ps -q)
但我简化了问题。
更新:
对不起,我把我的问题简单化了。我的命令使用Here Document(因为内部命令很复杂,使用了很多不同的引号)
ssh user@192.168.1.1 <<SSHCOMMAND
echo $(uname -a)
SSHCOMMAND
所以 Ignacio Vazquez-Abrams 的解决方案将不起作用
单引号抑制所有替换。
ssh user@192.168.1.1 'echo $(uname -a)'
我找到了 solution -
ssh user@192.168.1.1 <<'SSHCOMMAND'
echo $(uname -a)
SSHCOMMAND
对我来说很奇怪,但是有效,感谢 Ignacio Vazquez-Abrams 为这个过程提供了正确的名称 'substitution',我之前找不到 :)
我尝试通过 ssh 发送命令,如下所示:
ssh user@192.168.1.1 "echo $(uname -a)"
但我的问题是,$(uname -a)
部分实际上创建了一个子 shell 并且不是在 192.168.1.1 服务器上执行,而是在我执行此命令的系统上执行。
我该如何解决?
P.S。我的实际示例涉及 docker 停止所有命令,看起来像
docker stop $(docker ps -q)
但我简化了问题。
更新: 对不起,我把我的问题简单化了。我的命令使用Here Document(因为内部命令很复杂,使用了很多不同的引号)
ssh user@192.168.1.1 <<SSHCOMMAND
echo $(uname -a)
SSHCOMMAND
所以 Ignacio Vazquez-Abrams 的解决方案将不起作用
单引号抑制所有替换。
ssh user@192.168.1.1 'echo $(uname -a)'
我找到了 solution -
ssh user@192.168.1.1 <<'SSHCOMMAND'
echo $(uname -a)
SSHCOMMAND
对我来说很奇怪,但是有效,感谢 Ignacio Vazquez-Abrams 为这个过程提供了正确的名称 'substitution',我之前找不到 :)