次のようなスクリプトがあります。
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の実行を終了するまで保持する方法はありますか。
SSHセッションは、リモートサーバーでコマンド(スクリプト)の実行が完了するまで終了しません。
スクリプトがサーバー上のファイルにデータを出力するのか、それとも標準出力にデータを出力するのかに応じて、2つのことのいずれかを実行できます。
サーバー上のファイルにデータを出力する場合:
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
コマンド(バックグラウンドプロセスとして実行される)が終了するまでスクリプトを一時停止します。
リモートコマンドの出力をキャプチャする必要がある場合は、次のようなものが機能します。
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