バックグラウンドでいくつかのことを実行してスピードを上げたいCIスクリプトがあります。私は、スクリプトがすべてのプロセスを待って、それぞれのプロセスが失敗したかどうかを確認します。ここでバックグラウンドでいくつかのコマンドを実行することはできますが、すべての結果を待ってコマンドが失敗した場合はスクリプトに失敗します。
簡素化:
#!/bin/bash
set -e
bg()
{
sleep .$[ ($RANDOM % 10) + 1 ]s
}
bg2()
{
sleep .$[ ($RANDOM % 10) + 1 ]s
exit 1
}
bg & # will pass after a random delay
bg2 & # will fail after a random delay
# I want the output of the program to be a failure since bg2 fails
のようにそれを行く "$を!" '最初の待機コマンドでやる? – Robert
@Robert:バックグラウンドジョブのprocess-idを取得するために、waitコマンドの引数として渡される非ゼロの整数。 – Inian
これは、元の質問からの重要な側面、すなわち、バックグラウンドジョブが失敗した場合の失敗が欠落しています。複数のバックグラウンドプロセスを待っていると、終了ステータスに関する情報が失われます。ジョブが成功するか失敗するかを個別に確認する必要があります。 – chepner