Bashのmanページには、stderrとstdoutをリダイレクトする方法が2つあります:
&> file
と>& file
。ここで、stderrとstdoutの両方が表示されていることに注意してください。
この場合、>file 2>&1
stdout(1)をファイルにリダイレクトしますが、stderr(2)をstdoutと同じ場所にリダイレクトするように指示しています!そのため、目的は同じかもしれませんが、考え方は少し異なります。言い換えると、「ジョン、学校に行って、サッジーはジョンが行ったところに行く」。
好みはどうですか?&>
であるbash
事。したがって、スクリプトを移植する場合、それは実行されません。ただし、スクリプトがbashを使用するシステムでのみ動作することを100%確信している場合は、優先順位はありません。
dash
UbuntuのデフォルトであるDebian Amquist Shellの例を次に示します。
$ grep "YOLO" * &> /dev/null
$ grep: Desktop: Is a directory
grep: Documents: Is a directory
grep: Downloads: Is a directory
grep: Music: Is a directory
grep: Pictures: Is a directory
grep: Public: Is a directory
grep: Templates: Is a directory
grep: Videos: Is a directory
grep: YOLO: Is a directory
grep: bin: Is a directory
ご覧のとおり、stderrはリダイレクトされていません
質問の編集に対処するには、ifステートメントを使用して$ SHELL変数を確認し、それに応じてリダイレクトを変更できます
しかし、ほとんどの場合、動作する> file 2>&1
はずです
より専門的な用語では、フォーム[integer]>&word
はDuplicateating Output File Descriptorと呼ばれ、POSIXシェルコマンド言語標準で指定された機能であり、ほとんどのPOSIX準拠およびBrourneのようなシェルでサポートされています。
出力リダイレクトでの正確な意味と意味も参照してください。