103.4標準
run-jobの標準出力と標準エラーをall.logへ上書き保存する。
Bashで両ストリームを同じ開かれた出力先へ送る。
適切なコマンドはどれか。
× 不正解
リダイレクトは左から処理される。> all.logの後に2>&1を置くと、標準エラーも同じファイルへ送られる。
詳細解説
誤り
run-job 2> all.log標準エラーだけを保存する。
標準エラーしか保存しない。
正しい
run-job > all.log 2>&1先に標準出力をall.logへ向け、FD 2を現在のFD 1へ複製する。
正解。先にFD 1をファイルへ向け、FD 2も同じ先へ複製する。
誤り
run-job 2>&1 > all.logFD 2を元の端末へ複製してからFD 1だけをファイルへ変える。
FD 2は元の端末を参照したままになる。
誤り
run-job > all.log 1>&2FD 1を標準エラー側へ複製し直し、all.logへ残らない。
FD 1を再びFD 2側へ向けてファイル出力を失う。
実際に確かめる
一時的な検証環境で実行できる例です。
bash -c 'printf OUT; printf ERR >&2' > /tmp/kp-all.log 2>&1; cat /tmp/kp-all.log; rm /tmp/kp-all.log期待される結果
OUTERR理解のポイント
- 2>&1はFD 2をFD 1へ複製
- 左から順に評価
- 両方が同じ出力先になる
確認時の注意
- 確認環境: Bash 5.2
基礎のおさらい
ファイル名への二重出力
>all 2>allのように別々に同じファイルを開くより、FD複製で同じ開かれた記述を共有する。
Bash短縮形
Bashでは&> all.logでも両方を同じファイルへ送れるが、2>&1の順序理解は他の構成にも応用できる。
問題IDKP-103-067
確認環境Bash 5.2
最終技術確認2026-08-12
誤り・権利侵害を報告