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