next up previous contents
Next: パイプ機能 Up: 入出力の切り換え(I/O redirection) Previous: ヒアドキュメント(here document)

エラー出力を標準出力にマージする

標準出力の記録とエラー履歴を一緒に取るためにコマンドラインで次のような記述 をすると思います。

$ command >foo 2>&1
この動作を追いかけてみます。リダイレクト機能表でも分かるように >& の 働きは、左側に書かれたファイルディスクリプタの出力を右側に書かれたファイルディ スクリプタに変更することです。 シェルは標準入力・標準出力・エラー出力の3つのファイルをオープンしています。 そして、それらをファイルディスクリプタ0、1、2として管理しています。 ですから 2>&1 はファイルディスクリプタ2を1に、つまりエラー出力を標準 出力に変更することになります。さらに、>foo として標準出力がfooにリダイレク トされていますから、fooには標準出力とエラー出力がマージされたものが書き出され ることになります。

リダイレクトのメカニズムを理解する上で大切なことは、コマンドラインで記述された ものが 右から左の順 に実行されるということです。エラー出力を標準出力にマージする この例では、まず最初に 2>&1 が実行されてから >foo が実行されます。 もし、コマンドラインで

$ command 2>&1 >foo
と書いたならば違った結果になってしまいます。どうなるかはご自分でお試しください。



Riichiro Saito
1995年08月29日(火) 11時41分26秒 JST