シェルには標準出力とは別に、標準エラー出力という、データを出力する通り道が
用意されている。
なぜわざわざ2つの出力先を作ってあるかというと、コマンドを実行した時に
何かエラーが生じた場合、エラーの表示を普通の出力データとは、区別して出力するためである。
(エラー出力も標準出力に出すとリダイレクションを使用している時にエラーが出てこなくなる)
C言語などでプログラムを作る場合も、コマンドの使用方法を表示するには、標準エラー出力を使用するのが
UNIXの世界の礼儀になっている。
以下の例のように、例えばccでエラーの出力をファイルに落そうとしても
>を使ったリダイレクションでは画面に表示されてしまう。
これを避けるためには>&という形のリダイレクションを使用する。
パイプに標準エラー出力を通したい場合には、|& を使用する。
# cat test.c
main()
{
printf("test\n"); <- プログラムにエラーがある
}
# cc test.c
accom: Error: tmp.c, line 3: syntax error
printf("test\n");
----------------^
# cc test.c > err <- エラー表示をファイルに落そうとしても
accom: Error: tmp.c, line 3: syntax error <- 画面に表示されてしまう
printf("test\n");
----------------^
# cc test.c >& err <- >&を使ってみると
# cat err <- ちゃんとファイルに書き込まれる
accom: Error: tmp.c, line 3: syntax error
printf("test\n");
----------------^
#