Linuxでwaitコマンドを使用する方法は?

Linuxでwaitコマンドを使用する方法は?
#!/bin/bash
function back()
{
    sleep $1
    exit $2
}
back $1 $2 &
b=$!
if `wait $!`;then
    echo success
else
    echo failure
fi
bash-3.00# ./back 300 0
failure
bash-3.00# ./back 300 1
failure

0を送信するとsuccess終了ステータスが予想されますが、それでも受信されますfailure

また、wait300秒の待ち時間はありません。代わりにすぐにメッセージを受け取ります。私は$!スクリプトで直系の子を仮定しています$$。いいえ?

waitなどの終了ステータスをキャプチャできますかexit_status=$(wait $!)

if ! ((exit_status));then
    echo sucess
else
    failure
fi

ベストアンサー1

wait問題は、サブシェルで次を実行することです。

if `wait $!`;then

wait命令ではなく組み込み命令なのでサブシェル、現在シェルではありません。

表示されますが表示されない出力は次のとおりです。

wait: pid 12344 is not a child of this shell

...戻り状態は1です。

テストを実行するには、サブシェルを使用せずにテストする必要があります。

#!/bin/bash
function back()
{
  sleep $1
  exit $2
}
back $1 $2 &
b=$!

wait $b && echo success || echo failure

これは予想される結果を提供し、予想された時間を待ちます。

$ time ./test.sh 3 0
success
./test.sh 3 0  0.00s user 0.01s system 0% cpu 3.012 total
$ time ./test.sh 3 1
failure
./test.sh 3 1  0.00s user 0.01s system 0% cpu 3.012 total

以下を使用してコマンドの終了ステータスを確認できます$?

$ /bin/true
$ echo $?
0
$ /bin/false
$ echo $?
1

スクリプトに異なるエラーがあります。行#!形式が正しくありません。修正しました。$!に割り当てたが$b使用しないでください$b

おすすめ記事