다음과 같은 스크립트가 있습니다.
command1
command2
ssh login@machine_with_lots_of_ram:~/script_that_needs_ram.sh
command4 output_file_from_above
명령 4에는 ssh 명령의 출력이 필요합니다.
계속하기 전에 ssh 스크립트가 완료될 때까지 기다리도록 프로그램에 어떻게 지시합니까? 또는 명령 1 이후에 원격 시스템에서 실행되도록 ssh 스크립트를 설정하고 완료될 때까지 프로그램이 명령 4를 실행하지 못하도록 하려면 어떻게 해야 합니까?
답변1
원격 서버에서 명령(스크립트) 실행이 완료될 때까지 SSH 세션은 종료되지 않습니다.
스크립트가 데이터를 서버의 파일로 출력하는지 아니면 표준 출력으로 출력하는지에 따라 두 가지 중 하나를 수행할 수 있습니다.
데이터를 서버의 파일로 출력하는 경우:
ssh user@host script.sh scp user@host:remote_output local_output process_output local_output
이는 기본적으로
scp
서버에서 로컬 컴퓨터로 데이터를 복사하는 데 사용됩니다.데이터를 표준 출력으로 인쇄하는 경우:
ssh user@host script.sh >local_output process_output local_output
그러면 스크립트의 표준 출력이 로컬 파일로 리디렉션됩니다.
설치 프로그램이 먼저 실행된 다음 기다립니다.
ssh user@host script.sh &
# do other stuff
wait
scp user@host:remote_output local_output
process_output local_output
또는
ssh user@host script.sh >local_output &
# do other stuff
wait
process_output local_output
명령(백그라운드 프로세스로 실행 중)이 종료될 wait
때까지 스크립트를 일시 중지 합니다 .ssh
답변2
원격 명령의 출력을 캡처해야 하는 경우 다음과 같이 작동합니다.
command1
command2
ssh login@machine_with_lots_of_ram "~/script_that_needs_ram.sh" > remote_output.log
command4 remote_output.log
# optionally: rm remote_output.log
표준 입력에서 입력을 받으면 command4
다음을 수행할 수도 있습니다.
ssh login@machine_with_lots_of_ram "~/script_that_needs_ram.sh" | command4