103.4標準
run-jobの標準出力だけをoutput.logへ保存する。
標準エラーはコマンド開始時の端末へ表示し、ファイルには入れない。FD複製を明示して順序を問う。
要件どおりになるコマンドはどれか。
× 不正解
2>&1 > output.logでは、FD 2は先に元の標準出力を参照する。後からFD 1だけがファイルへ変わるため、エラーは端末側に残る。
詳細解説
誤り
run-job > output.log 2>&1両方がoutput.logへ入る。
標準エラーもファイルへ入る。
誤り
run-job 2> output.log 1>&2両方がoutput.logへ入る。
両FDがファイル側を向く。
正しい
run-job 2>&1 > output.logFD 2を元のFD 1へ複製してから、FD 1だけをoutput.logへ変更する。
正解。エラーは元の端末、通常出力はoutput.logになる。
誤り
run-job > output.log 2> /dev/null標準エラーを端末へ出さず破棄する。
エラーを端末ではなく破棄する。
実際に確かめる
一時的な検証環境で実行できる例です。
bash -c 'printf OUT; printf ERR >&2' 2>&1 > /tmp/kp-only-out.log; printf '|'; cat /tmp/kp-only-out.log; rm /tmp/kp-only-out.log期待される結果
ERR|OUT理解のポイント
- リダイレクト順序で結果が変わる
- 複製はその時点の出力先を参照
- 後のFD 1変更はFD 2へ遡及しない
確認時の注意
- 確認環境: Bash 5.2
基礎のおさらい
順序依存
同じ記号を使っても並び順が変わるとFDの最終的な接続先が変わる。
端末の意味
この問題の元のFD 1は端末を前提とする。呼出し元ですでにリダイレクトされていれば、その出力先を継承する。
問題IDKP-103-068
確認環境Bash 5.2
最終技術確認2026-08-12
誤り・権利侵害を報告