バックグラウンドジョブを強制終了するときに 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リダイレクトするように追加し、 を使用してすべての出力を null デバイスにリダイレクトします。ただし、出力は引き続きターミナルに表示されます。stderrstdout> /dev/null

何か説明はありますか?

前もって感謝します。

更新された情報:

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

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

答え1

出力リダイレクトはプロセスのプロパティです。したがって、2>&1でリダイレクトすると、現在stdout の出力を現在の TTY である stderr に出力する場合、次の > は stdout を /dev/null に設定し、stderr は TTY に設定されます。更新された情報では、最初に stdout を正しく設定しているため、両方とも /dev/null になります。

関連情報