103.4標準
run-checkの標準出力と標準エラーの両方からERRORを含む行を抽出する。
Bashでgrepへ1本のパイプとして渡す。
適切なコマンドはどれか。
× 不正解
通常の|が接続するのは左コマンドの標準出力だけである。2>&1で標準エラーを統合すると両方をgrepへ渡せる。
詳細解説
正しい
run-check 2>&1 | grep ERROR標準エラーを標準出力へ統合してから、パイプでgrepへ渡す。
正解。run-checkの両出力がgrepの入力になる。
誤り
run-check | grep ERROR 2>&1run-checkの標準エラーはパイプへ入らず端末へ残る。
grep自身のFDを変更するだけで、run-checkのエラーはパイプ外である。
誤り
run-check 2> grep ERRORgrepというファイルへ標準エラーを向け、ERRORはrun-checkの引数になる。
ファイルへのリダイレクトでパイプではない。
誤り
run-check > grep ERRORgrepというファイルへ標準出力を保存し、パイプを作らない。
標準出力をファイルへ書くだけでgrepを実行しない。
実際に確かめる
一時的な検証環境で実行できる例です。
bash -c 'printf "INFO ok\n"; printf "ERROR bad\n" >&2' 2>&1 | grep ERROR期待される結果
ERROR bad理解のポイント
- |は標準出力を接続
- 2>&1で標準エラーを統合
- 統合はパイプより左で行う
確認時の注意
- 確認環境: Bash 5.2 / GNU grep 3.x
基礎のおさらい
パイプの既定
通常の|は標準エラーを自動では運ばない。
Bashの|&
Bashではcommand |& grepがcommand 2>&1 | grepの短縮形として使える。
問題IDKP-103-069
確認環境Bash 5.2 / GNU grep 3.x
最終技術確認2026-08-12
誤り・権利侵害を報告