
[~]$ 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.