コマンドをバックグラウンドで実行する

シェルスクリプトでコマンドをバックグラウンドで実行するには、コマンドの末尾に&を付ける。

command &

バックグラウンドで実行したプロセスの終了を待つには、waitコマンドを使用する。

wait

受け取れるのはプロセスの終了コードのみで、標準出力や標準エラーはそのままでは受け取ることができない。

標準出力や標準エラーを受け取るには、プロセスの出力をファイルにリダイレクトしておき、waitの後でそのファイルを読み取る必要がある。

command > output.txt 2>&1 &
wait
cat output.txt

もしくは、名前付きパイプ(FIFO)を使用して、リアルタイムで出力を受け取ることもできる。

mkfifo mypipe
command > mypipe 2>&1 &
while read line; do
    echo "Output: $line"
done < mypipe
wait

プロセス置換を使用して非同期処理の出力を受け取る

プロセス置換とexecを組み合わせることで、非同期処理の出力を直接受け取ることもできる。

exec 3< <(command)
while read -u 3 line; do
    echo "Output: $line"
done