원격 호스트에서 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
답변2
해결책은 다음과 같습니다.
ssh -i ~/keys/pem_key.pem [email protected] "sudo docker logs \$(docker ps | grep 'test' | awk '{print\$1}')"