stderr に「Permission denied」が表示されないのはなぜですか?

stderr に「Permission denied」が表示されないのはなぜですか?

コマンドがあります。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 ファイルに書き込まれます。

関連情報