リモートホストで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
。<<"EOF"
また、この特別なケースは次のように単純化できます。
ssh -i ~/keys/pem_key.pem [email protected] <<'EOF'
sudo docker logs $(docker ps | awk '/test/{print$1}')
EOF