我正在尝试执行在远程主机上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
只是一个习惯且易于输入的值。如果您愿意,也可以使用<<\EOF
or代替。<<"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}')"