バックグラウンドジョブを終了したときにI / Oリダイレクトが機能しないのはなぜですか?

バックグラウンドジョブを終了したときにI / Oリダイレクトが機能しないのはなぜですか?
[~]$ kill %123

bash: kill: %123: no such job

[~]$ kill %123 2>&1 > /dev/null

bash: kill: %123: no such job

バックグラウンドジョブの終了中にすべての出力を無効にしたいと思います。

最初の出力が期待されます。しかし、2番目の出力はそうではありません。

コマンドラインに示すように、「次に2>&1リダイレクトstderr」を追加し、「すべての出力を空のデバイスにリダイレクトする」をstdout使用しました。> /dev/nullただし、出力は依然として端末に表示されます。

説明がありますか?

よろしくお願いします。

アップデート情報:

次のコマンドは期待どおりに機能します。

kill %123 > /dev/null 2>&1

ベストアンサー1

出力リダイレクトはプロセスの属性です。したがって、2>&1リダイレクトを使用する場合、このセットは現在のstdoutをstderr(つまり現在のTTY)に出力し、> stdoutを/ dev / nullに設定してstderrをTTYに設定します。更新された情報で最初にstdoutを正しく設定したので、両方とも/dev/nullになります。

おすすめ記事