私がこれを持っていると言う:
set -e;
(
docker stop notifier-server
docker rm -f notifier-server
exit 1 # explicitly exit with non-zero
) &
wait;
echo 'we are here now'
サブシェルがゼロ以外で終了した場合でも、常にエコーラインに到達しますか?それはバックエンドプロセス/サブシェルなので、私はそう思いますか?
これを見る正しい方法は何ですか?
ゼロ以外の終了ステータスは返されませんなので、コードは現在のシェルセッションを終了しません。バックグラウンドジョブを開始するシェルの呼び出しの結果は常にゼロです。
wait "$!"
またはwait -n
( "次のジョブが終了するのを待つ")を使用した場合、wait
が返されるため、シェルセッションwouldは終了します。待機していたジョブの終了ステータス。ゼロ以外です。
bash
のhelp wait
を参照してください。
バックグラウンドプロセスであるプロセスとは関係ありません。wait
コマンドの終了ステータスと関係があります。
help wait
から:
IDが指定されていない場合、現在アクティブなすべての子プロセスを待機し、戻りステータスはゼロです。
$ bash -exc '(sleep 1; exit 1) & wait ; echo done'
+ wait
+ sleep 1
+ exit 1
+ echo done
done
-nオプションが指定されている場合、次のジョブが終了するのを待ち、その終了ステータスを返します。
$ bash -exc '(sleep 1; exit 1) & wait -n; echo $?:done'
+ wait -n
+ sleep 1
+ exit 1