今日まで存在を知らなかった。。。バックグラウンドプロセスが終了するまで待ち合わせするコマンド。
惰性で順次実行してたシェルスクリプトを手軽に並行実行できるようになって効率上がるかも。
- 環境
$ bash --version GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin10.0) Copyright (C) 2007 Free Software Foundation, Inc. $ help wait wait: wait [n] Wait for the specified process and report its termination status. If N is not given, all currently active child processes are waited for, and the return code is zero. N may be a process ID or a job specification; if a job spec is given, all processes in the job's pipeline are waited for.
- 例1) wait なし
$ cat test.sh #!/bin/bash date (sleep 1; echo 'sleep 1') & (sleep 2; echo 'sleep 2') & (sleep 3; echo 'sleep 3') & date $ ./test.sh 2013年 12月 8日 日曜日 23時03分12秒 JST 2013年 12月 8日 日曜日 23時03分12秒 JST sleep 1 sleep 2 sleep 3
- バックグラウンドプロセスの終了を待たずに2つ目の date コマンドが実行されて日時を出力。その後1、2、3秒ごとに echo の結果が。
- 例2) wait あり
$ cat test.sh #!/bin/bash date (sleep 1; echo 'sleep 1') & (sleep 2; echo 'sleep 2') & (sleep 3; echo 'sleep 3') & wait date $ ./test.sh 2013年 12月 8日 日曜日 23時06分58秒 JST sleep 1 sleep 2 sleep 3 2013年 12月 8日 日曜日 23時07分01秒 JST
- 全バックグラウンドプロセスの実行&終了を待ってから2つ目の date コマンドが実行された。合計3秒待ったから3秒後の日時がプリントされた。