by shigemk2

当面は技術的なことしか書かない

2>&1についての小咄

たとえばこういうシェル芸があったとします。

(echo "to stderr" >&2 ; echo "to stdout" ) 2>&1 >> somefilewhat
(echo "to stderr" >&2 ; echo "to stdout" ) >> somefilewhat 2>&1

書き方が違うのですから結果が違うのはまあ当然として、キーワードは2>&1

大変ググラビリティの低いワードでございます。と思ったら普通に検索できた。

先に2>&1で標準エラー出力をリダイレクトしてからそれをファイルにリダイレクトすると標準出力しかファイルにリダイレクトされないというはなし。

標準出力とかは(僕の中では)結構難しいところですが、

実際のリダイレクトの処理は、コマンドラインの左から右へ、ファイルディスクリプタをオープン/クローズしながら進められる

つまり、リダイレクトの処理は都度切り捨てられているという理解です。

f:id:shigemk2:20150220194116p:plain

参考リンク

shell - cmd > /dev/null 2>&1」の話 - Qiita

シェルのリダイレクトにまつわる失敗