シェルスクリプトでバックグラウンドコマンドが失敗した場合

シェルスクリプトでバックグラウンドコマンドが失敗した場合

この問題が解決されたと確信していますが、答えを見つける方法がわかりません。

#!/usr/bin/env bash

set -e;
false &
wait;
echo "lol"

これを実行すると「wwww」が出ます。

バックグラウンドコマンド(この場合は「false」)がゼロ以外の値で終了した場合にスクリプトを終了する方法はありますか?

この場合、set -e;コマンドがゼロ以外の値で終了し、コマンドがバックグラウンドで実行されている場合、スクリプトが続行するのを防ぐことはできないようです。

答え1

最新バージョンのbashを使用している場合(この機能はbash 4に導入されたようです)wait -n

waitそれ以外の場合は、起動したバックグラウンドプロセスのpidを含むパラメータを渡すことができます$!

よりコマンドを待つドキュメントコマンド戻り状態のwait詳細です。

これにより、トリックを実行できます。

set -e
false &
wait -n
echo "lol"

これもうまくいきます。

set -e
false &
background_pid=$!
wait "${background_pid}"
echo "lol"

関連情報