Bash 스크립트를 계속하기 전에 ssh를 통한 스크립트 실행이 끝날 때까지 기다리십시오.

Bash 스크립트를 계속하기 전에 ssh를 통한 스크립트 실행이 끝날 때까지 기다리십시오.

다음과 같은 스크립트가 있습니다.

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 세션은 종료되지 않습니다.

스크립트가 데이터를 서버의 파일로 출력하는지 아니면 표준 출력으로 출력하는지에 따라 두 가지 중 하나를 수행할 수 있습니다.

  1. 데이터를 서버의 파일로 출력하는 경우:

    ssh user@host script.sh
    scp user@host:remote_output local_output
    process_output local_output
    

    이는 기본적으로 scp서버에서 로컬 컴퓨터로 데이터를 복사하는 데 사용됩니다.

  2. 데이터를 표준 출력으로 인쇄하는 경우:

    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

관련 정보