コマンドがあります。mywritercmd -f /tmp/test 2>&1 > log.txt
bash 端末で実行すると、コマンドが返されます。error: could not open output file "/tmp/test": Permission denied
ただし、このエラーメッセージは次のように記録されません。ログ.txtファイルが空です...
なぜ?
私はこのメッセージをstderrに送信してからファイルに送信する必要があると思いますが、どういうわけかそうではありません。
答え1
並べ替えると違いがあります。コマンドラインは左から右に評価されます。到着すると、2>&1
stdoutがある場所にstderrを渡すように指示があります。現在、この> log.txt
部分は評価されていません。その結果、stderr は端末に出力されるデフォルト状態のままです。
mywritercmd -f /tmp/test > log.txt 2>&1
これにより、目的の動作が発生し、エラーメッセージがlog.txtファイルに書き込まれます。