イントロ
シェルでこんなコマンドを見ることがある。null 2>&1
これが何をやっているのか、初めてだとわかりにくいかもしれませんので、このノートで簡単に説明します。
I/O Redirection
今、簡単なテキストファイルがあるとします:
ここで、このファイルの内容を別の場所にリダイレクトします:
上記のリダイレクト動作では、ターミナルに何も表示されませんが、これは>コマンドが test.txt の中身をoutput.txtは、標準出力(stdout)です。
標準出力とは対照的に、標準エラー(stdr)がある、例えば
現在のディレクトリに no_such_file.txt という名前のファイルが存在しないため、リダイレクト処理中にエラーが発生しました。 この場合、>コマンドを使用しても、stdoutがなく、代わりにstderrorのエラーメッセージが表示されるため、output.txtに内容を入力することはできない。
File Descriptor
ファイル記述子は、開いているファイルに対する正の整数と考えることができる。
Unix/Unix 系システムでは、stdout と stderr 専用のファイルディスクリプタもあり、はっきり言って、これらの出力のための専用の行き先を持っているのです。for these output destinations:
- 1: for stdout
- 2: for stderr
Putting all together
以上の考え方により、もし既知のファイルの内容を別のファイルに書きたい場合、以下のようになります。
こちら側の1がstdoutを表し、その構文は次のように表される:
- >
つまり、誰かが from.foo > to.bar と書いたとき、それは
同様に、標準エラーコードをリダイレクトするには次のようにします:
stdout と stderr の両方を同じ宛先にリダイレクトしたい場合は、次のようにしてください。