shellのredirect(シェルのリダイレクト)

これ(http://d.hatena.ne.jp/m-hiyama/20071221/1198221671)を読んで勉強させられました。特にこの部分、

ここで、noneは「何も表さない値」で、noneがファイルディスクリプタに代入されると、そのファイルディスクリプタは閉じられ使えなくなります。一時的に使ったファイルディスクリプタの後始末にnoneを使います(後始末しなくても、たいてい大丈夫ですが)。コマンドライン構文では、番号nに対してn>&-としてファイルディスクリプタnを閉じます。

n>&-とは、例題の、

$ some-command 3>&1 >/dev/null 2>&3 3>&- | less

の3>&-の部分。

この例題が何をしたいのかは説明を読まなくてもわかっていたのだが、わたくし、恥ずかしながらずっと "-" はpipeに渡されるもんだと思ってました。ファイルディスクリプタを閉じるなんて、努々(ゆめゆめ)思ってなかった。

$ tar cf - ./foo | gzip > foo.tar.gz

とか、

$ tar cf - ./bar | (cd /foo;tar xf -)

のようにstdin/stdoutをpipeで媒体させる場合のUNIXコマンドのデファクトな使い方なんだと思っていた次第です。

ちゃんとマニュアル読まないとだめですね。やっぱり。