web-dev-qa-db-ja.com

sshを介して実行されるスクリプトが完了するのを待ってから、bashスクリプト内で次に進んでください。

次のようなスクリプトがあります。

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の実行を終了するまで保持する方法はありますか。

4
bioinformatics1

SSHセッションは、リモートサーバーでコマンド(スクリプト)の実行が完了するまで終了しません。

スクリプトがサーバー上のファイルにデータを出力するのか、それとも標準出力にデータを出力するのかに応じて、2つのことのいずれかを実行できます。

  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コマンド(バックグラウンドプロセスとして実行される)が終了するまでスクリプトを一時停止します。

4
Kusalananda

リモートコマンドの出力をキャプチャする必要がある場合は、次のようなものが機能します。

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
0
DopeGhoti