Lから始まるLinux

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