次のスクリプトがあります。
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セッションは終了しません。
スクリプトがデータをサーバー上のファイルに出力するのか標準出力に出力するのかに応じて、2つのうちの1つを実行できます。
データをサーバー上のファイルに出力する場合:
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