GNU 화면을 사용하여 연속적으로 명령을 실행합니다. (다음 명령은 이전 명령이 완료된 후에만 실행됩니다.)

GNU 화면을 사용하여 연속적으로 명령을 실행합니다. (다음 명령은 이전 명령이 완료된 후에만 실행됩니다.)

여러 명령을 차례로 쌓기 위해 화면 명령을 사용하려고 합니다. 먼저 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"

관련 정보