シェルプログラミング - 「ファイル名 2>&1」について

以下の記述は慣れていないと?となりますが
(echoコマンドはエラーにならないので例がわるいのですが…)

echo "Hello World" > out.txt 2>&1

分解すると
①「> out.txt」でecho "Hello World"の標準出力に出力
②「2>&1 」は標準エラー出力を標準エラー出力に出力

echo "Hello World"の標準出力も標準エラー出力も「out.txt」に出力するという意味です。

$ echo "Hello World" > out.txt 2>&1
$ cat out.txt
Hello World

例えば

$ cat aaa.txt bbb.txt ccc.txt
Contents of aaa.txt
Contents of bbb.txt
cat: ccc.txt: No such file or directory
$ cat aaa.txt bbb.txt ccc.txt > out.txt 2>&1
$ cat out.txt
Contents of aaa.txt
Contents of bbb.txt
cat: ccc.txt: No such file or directory

以下は標準出力を 「out.txt」に出力してるだけなのでエラーメッセージがコマンドラインに表示されています。

# こう書いても同じです。
# cat aaa.txt bbb.txt ccc.txt 1> out.txt

$ cat aaa.txt bbb.txt ccc.txt > out.txt
cat: ccc.txt: No such file or directory
$ cat out.txt
Contents of aaa.txt
Contents of bbb.txt

以下は、標準エラー出力のみ「out.txt」に出力しています。

$ cat aaa.txt bbb.txt ccc.txt 2> out.txt
Contents of aaa.txt
Contents of bbb.txt
$ cat out.txt
cat: ccc.txt: No such file or directory

ここまで見ると「2>&1」の意味がわかってきます。

標準出力と標準エラー出力を別のファイルに書き出したい場合は以下のようになります。(これはやらないと思いますが…)

$ cat aaa.txt bbb.txt ccc.txt > out1.txt 2> out2.txt

この記事が気に入ったらサポートをしてみませんか?