今回はリダイレクトと関わりが深い
「ファイルディスクリプタ
(file descriptor, FD)」
について学ぼう!
「ファイル記述子」
ともよばれるよ
便利なリダイレクトが
もっと便利になるのかな?!
ファイルディスクリプタは
入力元や出力先を表す概念だよ
標準では以下が定義されているんだ
番号 | 名前 | 入力元 / |
---|---|---|
0 | 標準入力(standard input, |
キーボード入力 |
1 | 標準出力(standard output, |
端末画面出力 |
2 | 標準エラー出力(standard error outout, |
端末画面出力 |
コマンドの出力結果を
ファイルに出力したい場合でも
通常はエラーメッセージまでは
含めて欲しくないよね?
これらを区別するために
「通常」と「エラー」で
出力を分けているんだ
リダイレクト記号の前に
「番号」を記述することで
対象のファイルディスクリプタを
リダイレクトできるんだ
コマンド 番号> ファイル
あれ?前回は番号を指定しなかったよ?
番号は省略可能なんだ省略した場合…入力の場合は「標準入力( 出力の場合は「標準出力( となるよ
0
)」1
)」以下はコマンドの出力を
ファイル
に書き出しつつエラーメッセージを/dev/null
に捨てるよコマンド > ファイル 2> /dev/null
それじゃ…エラーメッセージを含めた出力全部を捨てたいのならこのようにすればいいんだね!
コマンド > /dev/null 2> /dev/null
そうだね!でももっと簡単に指定できるよ
えっ?これ以上簡単になるの?
リダイレクト先にファイルディスクリプタを指定するんだこのように記述するよ
コマンド >&番号
これを使ってこのように書けるんだ
コマンド > /dev/null 2>&1
「標準出力」 は /dev/null
に出力される「標準エラー出力( 2
)」は 「標準出力( 1
)」に出力される 「標準出力」 は /dev/null
に出力されるので「標準エラー出力」 も /dev/null
に出力される
おおっと!これは頭を使うぞ…
最初のうちは出力を全部捨てたいのなら
> /dev/null 2>&1
と機械的に覚えてしまおう!今回はファイルディスクリプタを学んだよその番号とリダイレクト記号を合わせて細かくリダイレクトを指定できるんだ!
特に「出力を全部捨てる」は頻出だよ コマンド末尾に
> /dev/null 2>&1
だよ!