Linuxとコマンドラインの基礎
$ ls
a.txt
$ ls a.txt nofile 2>&1 > out.txt上のように、a.txt はあり nofile はないディレクトリで、最後のコマンドを実行した。結果として、正しいものはどれか。
- Aエラーの行だけが out.txt に書かれ、a.txt の行は画面に表示される
- Bエラーの行も a.txt の行も out.txt に書かれ、画面には何も表示されない
- Ca.txt の行だけが out.txt に書かれ、エラーの行は画面に表示される
答えと解説を見る
正解:C. a.txt の行だけが out.txt に書かれ、エラーの行は画面に表示される
リダイレクトは左から順に処理されます。「2>&1」は「標準エラー出力(2)を、その時点の標準出力(1)の行き先と同じにする」という意味で、この時点の標準出力はまだ画面なので、エラーは画面に出ます。その後の「> out.txt」で標準出力だけが out.txt に変わるので、ファイルには ls の通常の出力である a.txt の行だけが書かれます。両方をファイルに書くには、「ls a.txt nofile > out.txt 2>&1」のように、先に標準出力を変えてから 2>&1 を書きます。
- A. 2>&1 は標準エラー出力を「その時点の」標準出力の行き先、つまり画面に向けます。エラーは out.txt には入りません。
- B. これは「> out.txt 2>&1」の順に書いたときの結果です。順番を入れ替えると結果が変わります。
- C. 正しい。2>&1 の時点では標準出力は画面なので、エラーは画面に出ます。