使用 ssh 执行 bash 管道

使用 ssh 执行 bash 管道

我正在尝试执行在远程主机上ssh执行命令的命令。bash我的问题是我想在执行过程中通过管道传输另一个命令的结果。

ssh -i ~/keys/pem_key.pem [email protected] "sudo docker logs $(docker ps | grep 'test' | awk '{print$1}')"

命令部分:

$(docker ps | grep 'test' | awk '{print$1}')

不在执行内部执行。

有什么办法可以实现这一点吗?

答案1

尽管可以获取需要通过ssh参数传递到远程的复杂引用的命令,但将其提供为通常更简单输入反而:

 ssh -i ~/keys/pem_key.pem [email protected] <<'EOF'
 sudo docker logs $(docker ps | grep 'test' | awk '{print$1}')
 EOF

请注意,here-doc 分隔符'EOF'被引用;这会导致输入在不进行任何更改的情况下传递到执行它的遥控器。它实际上可以是输入中不存在的任何字符串;EOF只是一个习惯且易于输入的值。如果您愿意,也可以使用<<\EOFor代替。<<"EOF"

另请注意,这种特殊情况可以简化为:

 ssh -i ~/keys/pem_key.pem [email protected] <<'EOF'
 sudo docker logs $(docker ps | awk '/test/{print$1}')
 EOF

答案2

解决方案如下:

ssh -i ~/keys/pem_key.pem [email protected] "sudo docker logs \$(docker ps | grep 'test' | awk '{print\$1}')"

相关内容