![Почему перенаправление ввода-вывода не работает при завершении фоновых заданий?](https://rvso.com/image/122424/%D0%9F%D0%BE%D1%87%D0%B5%D0%BC%D1%83%20%D0%BF%D0%B5%D1%80%D0%B5%D0%BD%D0%B0%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%B2%D0%B2%D0%BE%D0%B4%D0%B0-%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%D0%B0%20%D0%BD%D0%B5%20%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D0%B5%D1%82%20%D0%BF%D1%80%D0%B8%20%D0%B7%D0%B0%D0%B2%D0%B5%D1%80%D1%88%D0%B5%D0%BD%D0%B8%D0%B8%20%D1%84%D0%BE%D0%BD%D0%BE%D0%B2%D1%8B%D1%85%20%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B9%3F.png)
[~]$ 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.