LinuCレベル1 GNUとUnixのコマンド 問10
GNUとUnixのコマンド/ストリーム、パイプ、リダイレクトの使用パイプ | を使って複数のコマンドをつないだとき、シェルの終了ステータス $? にデフォルトで格納されるのはどれか。
当サイトのオリジナル問題(LinuCレベル1の出題範囲「GNUとUnixのコマンド」に対応。実際の試験問題ではありません)
- A常に0
- Bパイプライン中で最大の終了ステータス
- Cパイプライン最後のコマンドの終了ステータス
- Dパイプライン最初のコマンドの終了ステータス
正解:C
解説
bashのデフォルト動作(pipefailオプションが無効な状態)では、パイプラインの終了ステータス $? には、パイプライン中の最後のコマンドの終了ステータスが格納されます。途中のコマンドが失敗していても、最後のコマンドが成功すれば $? は0になります。この挙動を変えたい場合は set -o pipefail を使います。
選択肢ごとの解説
- A誤り。パイプライン中のコマンドが失敗すれば、$?が0以外になることもあります。
- B誤り。デフォルトでは最大値を採用する動作にはなりません(pipefailを設定しても最大値ではなく、いずれかが非0なら非0になる動作です)。
- C正しい。デフォルトでは、パイプライン全体の終了ステータスは最後のコマンドの終了ステータスになります。
- D誤り。最初のコマンドの終了ステータスがデフォルトで採用されるわけではありません。