LPIC-1 Exam 101 無料問題 6 / 10 ・ 分野3: GNU and Unix Commands
/etc/hostname はあり、/nope は無い。ls /etc/hostname /nope 2>&1 > out.txt を実行した。画面に出るものと out.txt に入るものの組み合わせとして正しいのはどれか。
- 画面: 表示0行/out.txt: エラーと /etc/hostname の2行
- 画面: エラーの1行/out.txt: エラーと /etc/hostname の2行
- 画面: 表示0行/out.txt: /etc/hostname の1行
- 画面: エラーの1行/out.txt: /etc/hostname の1行
正解と解説を見る
正解: D
正解の理由
リダイレクトは左から順に処理される。先に書いた 2>&1 は、その時点の標準出力の行き先である画面を、標準エラーの行き先として複製する。次の > out.txt は標準出力だけを out.txt に向け直す。標準エラーは複製した時点の画面のままなので、/nope が無いというエラーは画面に出て、out.txt には /etc/hostname の1行だけが入る。bash(1) も、この並びでは標準出力だけがファイルへ向くと書いている。
違う選択肢
「画面: 表示0行/out.txt: エラーと /etc/hostname の2行」… ls /etc/hostname /nope > out.txt 2>&1 と書いたときの結果。先に標準出力をファイルへ向けてから複製すれば、エラーも同じファイルに入る。
「画面: 表示0行/out.txt: /etc/hostname の1行」… エラーが画面から消えるのは 2>/dev/null で捨てたとき。2>&1 は行き先の複製で、エラーを捨てはしない。
「画面: エラーの1行/out.txt: エラーと /etc/hostname の2行」… 同じ内容が画面とファイルの両方に出るのは、tee を挟んだとき。1つの出力の行き先は1つで、エラーは画面か out.txt のどちらかにしか出ない。
押さえどころ
2>&1 は「標準エラーを、いまの標準出力と同じ所へ」という意味で、あとから標準出力を向け直しても付いていかない。両方を1つのファイルへ入れるなら ls ... > out.txt 2>&1 か、ls ... &> out.txt と書く。