このbashスクリプトがあります。
echo "x" & X=$!
echo "y" & Y=$!
( echo "z" ; exit 0; ) & Z=$! # this line
wait ${X} && echo "X $?"
wait ${Y} && echo "Y $?"
wait ${Z} && echo "Z $?"
終了0を終了1に変更すると、スクリプトの最後のエコー文は実行されません。たとえば、終了コードが0の場合の出力は次のようになります。
x
X 0
z
y
Y 0
Z 0
しかし、1に変更すると、次のようになります。
x
y
X 0
z
Y 0
私は括弧内の内容をサブシェルで実行する必要があるとします。私のコードがなぜこのようなことをするのか知っている人はいますか?
答え1
次の文書で説明されていますhelp wait
。
IDの状態を返します。
したがって、プロセスが終了すると、1
waitは2番目のコマンドを実行せずに返し、1
短絡&&
します。最初のコマンドが成功したかどうかにかかわらず、値を印刷するには;
代わりに試してください。&&