シェルプログラミング - 「ファイル名 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
この記事が気に入ったらサポートをしてみませんか?