Почему перенаправление ввода-вывода не работает при завершении фоновых заданий?

Почему перенаправление ввода-вывода не работает при завершении фоновых заданий?
[~]$ kill %123

bash: kill: %123: no such job

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

bash: kill: %123: no such job

Я хочу отключить весь вывод во время завершения фоновых заданий.

Первый вывод ожидаем. Однако второй вывод — нет.

Как показано в командной строке, я добавляю 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.

Связанный контент