105.2標準
check_jobが失敗した場合だけ、本文にFailureと書いたメールをrootへ送る。
mailコマンドが利用可能な環境とする。
適切な記述はどれか。
× 不正解
失敗時だけ通知する簡単な形はCOMMAND || printf ... | mail ...である。パイプラインは&&や||より先に構成されるため、右辺全体が通知処理になる。
詳細解説
誤り
check_job && printf '%s\n' Failure | mail -s Alert root検査成功時にだけメール側を実行する。
誤り。&&はcheck_jobが成功したときに通知パイプラインを実行するため、失敗時だけという要件と逆である。
正しい
check_job || printf '%s\n' Failure | mail -s Alert root演算子の優先関係により、失敗時だけパイプラインでrootへ送る。
正しい。check_jobが非0の場合だけprintfとmailのパイプラインを実行し、Failureを本文としてroot宛てに渡す。
誤り
check_job ; printf '%s\n' Failure | mail -s Alert root検査結果にかかわらずメールを送る。
誤り。;は条件を付けないため、check_jobが正常でも異常でも必ずFailureメールを作る。
誤り
check_job | mail -s Alert rootcheck_jobの標準出力を常にmailへ渡し、失敗時限定にも本文Failureにもならない。
誤り。パイプはcheck_jobを常に起動してその標準出力をmailへ渡すが、失敗時限定にも固定本文Failureにもならない。
実際に確かめる
一時的な検証環境で実行できる例です。
bash --noprofile --norc -c 'notify(){ cat >/dev/null; printf mailed; }; false || printf Failure | notify'期待される結果
mailed理解のポイント
- ||で失敗時限定
- mailの標準入力が本文
- -sは件名
確認時の注意
- 確認環境: GNU Bash 5.2 / mailは関数で安全に代替検証
- 実際の配送成否はローカルMTAやmail実装の設定に依存する。
基礎のおさらい
mailの入力
一般的なmail系コマンドは標準入力を本文として受け取り、-sで件名、その後の引数で宛先を指定する。
演算子のまとまり
パイプラインは&&や||の各オペランドとしてまとまるため、右側のprintf | mail全体が条件付きで実行される。
問題IDKP-105-638
確認環境GNU Bash 5.2 / mailは関数で安全に代替検証
最終技術確認2026-08-13
誤り・権利侵害を報告