答え1
実行中にスリープモードが終了すると、スリープモードが失敗する可能性があります。
$ sleep 2
$ echo "$?"
0
$ sleep 2
^C
$ echo "$?"
130
sleepは外部実行可能ファイルなので、forkまたはexec呼び出しも失敗する可能性があり、これによりbashはエラーコード> 0を生成します。
答え2
a; b
2番目のコマンドは常に最初のコマンドの後に実行され、最初のコマンドが成功したa && b
場合、つまり最初のコマンドがステータス0を返す場合にのみ実行されます。
sleep
シグナルによって終了しない限り、常に状態0を返します。この場合、ステータスは 128+ 信号番号です。 (sleep
コマンドが存在しない場合、またはリソース不足でプログラムを開始できない場合、状態は126または127になる可能性がありますが、このような状況が発生する可能性はほとんどありません。)
;
したがって、睡眠が中断された場合は、目的の日に応じてまたはを使用する必要があります。&&
sleep 10; echo hello
10秒後にメッセージを印刷します(sleep
信号によって終了した場合は少なくなります)。sleep 10 && echo hello
10秒後にメッセージを印刷しますが、sleep
信号で終了すると何も印刷しません。
答え3
スリープモードの失敗の可能性が非常に小さい場合でも、さまざまな理由ですべてのコマンドが失敗する可能性があると仮定する必要があります。
( sleep 10 ; echo "hello world" ) &
バックグラウンドスリープを意味し、スリーププロセスの後にエコーを実行しますが、スリープに失敗すると、エコーはとにかく実行されます。 完全な説明を見る
sleep 10 && echo "hello world" &
つまり、エコーが発生する前にスリープモードが終了するまで待つ必要があります。エコーが失敗するとプロセスは停止しますが、コマンド全体もバックグラウンドで実行されます。完全な説明を見る
結論として
最初の構文はシェルスクリプトです。つまり、コマンドを個別にリストとして扱います。
2番目のオプションはANDに&&を使用するため、最初のコマンドが失敗したときにそれを使用すると2番目のコマンドは実行されません。
エラーを処理するときの動作は異なります。