![GNU 화면을 사용하여 연속적으로 명령을 실행합니다. (다음 명령은 이전 명령이 완료된 후에만 실행됩니다.)](https://linux55.com/image/173746/GNU%20%ED%99%94%EB%A9%B4%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%97%B0%EC%86%8D%EC%A0%81%EC%9C%BC%EB%A1%9C%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%EC%8B%A4%ED%96%89%ED%95%A9%EB%8B%88%EB%8B%A4.%20(%EB%8B%A4%EC%9D%8C%20%EB%AA%85%EB%A0%B9%EC%9D%80%20%EC%9D%B4%EC%A0%84%20%EB%AA%85%EB%A0%B9%EC%9D%B4%20%EC%99%84%EB%A3%8C%EB%90%9C%20%ED%9B%84%EC%97%90%EB%A7%8C%20%EC%8B%A4%ED%96%89%EB%90%A9%EB%8B%88%EB%8B%A4.).png)
여러 명령을 차례로 쌓기 위해 화면 명령을 사용하려고 합니다. 먼저 Python 스크립트를 실행한 다음 이와 같이 SSH 호스트에 연결합니다.
$HOSTNAME은 슬레이브 노드-1입니다. $arg는 arg2입니다.
screen -dmS 1 sh -c "python3 pyscript1.py arg && \
ssh -i ~/.ssh/my-ssh-key user@remote-node \
"sed -i '/$HOSTNAME-pyscript1-$arg/s/$/1/' ~/test.txt"\
;exec bash"
내가 screen을 사용하는 이유는 이것이 내가 실행해야 하는 유일한 명령이 아니고, 실행되는 동안 pyscript1.py의 출력을 모니터링할 수 있어야 하기 때문입니다.
이 명령은 "1"이라는 새 화면을 생성하고 "arg" 인수를 사용하여 pyscript1.py 스크립트를 실행해야 합니다.명령이 완료될 때만, 이 명령을 사용하여 원격 호스트에 연결하여 파일을 변경하고 싶습니다.
exec bash의 목적은 명령이 완료된 후에도 화면을 열어 두는 것입니다.
sed 명령만 입력하면 작동합니다.
를 사용하여 "1"이라는 화면을 만들 수도 있습니다 screen -dmS 1
.
SSH를 사용하여 서버에 연결할 수도 있습니다.
그러나 위의 명령을 실행해도 아무 일도 일어나지 않습니다. 새로운 화면도 생성되지 않습니다.
내가 달릴 때
ssh -i ~/.ssh/my-ssh-key user@remote-node "sed -i '/$HOSTNAME-pyscript1-$arg/s/$ 1/' test.txt"
원하는 효과를 얻었어요
하지만 내가 시도할 때
screen -dmS 1 sh -c "ssh -i ~/.ssh/my-ssh-key user@remote-node "sed -i '/$HOSTNAME-pyscript1-$arg/s/$ 1/' test.txt";exec bash"
아무 일도하지
내가 뭘 잘못했나요?
답변1
여러 가지 인용 문제가 있습니다.
원래:
screen -dmS 1 sh -c "python3 pyscript1.py arg && ssh -i ~/.ssh/my-ssh-key user@remote-node "sed -i '/$HOSTNAME-pyscript1-$arg/s/$/1/ ~/test.txt;exec bash"
줄 바꿈이 있는 사람이 읽을 수 있는 버전
screen -dmS 1 sh -c "python3 pyscript1.py arg && ssh -i ~/.ssh/my-ssh-key "\
"user@remote-node "sed -i '/$HOSTNAME-pyscript1-$arg/s/$/1/ ~/test.txt;exec bash"
그럴 수도 있을 것 같아요
"sed -i '/$HOSTNAME-pyscript1-$arg/s/$/1/ ~/test.txt"
인수는 이어야 합니다 ssh
.
수정된 코드:
screen -dmS 1 sh -c "python3 pyscript1.py arg && ssh -i ~/.ssh/my-ssh-key "\
"user@remote-node \"sed -i '/$HOSTNAME-pyscript1-$arg/s/$/1/' ~/test.txt\";"\
"exec bash"