コマンドがあります。bashmywritercmd -f /tmp/test 2>&1 > log.txt
ターミナルで実行すると、コマンドは返します。error: could not open output file "/tmp/test": Permission denied
しかし、このエラーメッセージはログ.txtファイルは空のままです...
なぜ?
このメッセージは stderr に送られてからファイルに記録されるはずだと思っていましたが、どういうわけかそうではありません。
答え1
順序によって違いが生じます。コマンドラインは左から右に評価されます。 に到達すると2>&1
、命令は stderr を stdout が出力される場所に配信することです。この時点では、> log.txt
部分はまだ評価されていません。その結果、 stderr はデフォルトのままになり、端末に出力されます。
mywritercmd -f /tmp/test > log.txt 2>&1
すると、必要な動作が実行され、エラー メッセージが log.txt ファイルに書き込まれます。