Часто я сталкиваюсь с небольшими скриптами bash, которые используют такой синтаксис в операторах if:
какая-то команда>> /dev/null 2 и 1
Какова цель вывода в /dev/null
вот так, и что делает 2>&1
имею в виду?
Кажется, это всегда работает, но я хотел бы знать, что он делает.
>/dev/null
перенаправляет стандартный вывод команды на нулевое устройство, которое представляет собой специальное устройство, которое отбрасывает записанную на него информацию
2>&1
перенаправляет стандартный поток ошибок в стандартный выходной поток (stderr = 2, stdout = 1). Обратите внимание, что это принимает стандартный поток ошибок и указывает его в то же место, что и стандартный вывод в данный момент. Это и есть причина для заказа >/some/where 2>&1
потому что сначала нужно указать stdout куда-нибудь и затем укажите stderr в одно и то же место, если в конце вы хотите объединить оба потока.
На практике это предотвращает отображение любых выходных данных команды (как stdout, так и stderr). Он используется, когда вы не заботитесь о выводе команды.
STDIN представлен 0, STDOUT - 1, а STDERR - 2.
/dev/null это бит-ведро: место, куда вы сбрасываете все, что вам не нужно.
Итак, STDOUT перенаправляется в bit-bucket (корзину), а STDERR перенаправляется туда, где находится STDOUT: в bit-bucket.
Вы также можете сделать это:
>/dev/null 2>/dev/null
Не уверен, почему этот вопрос был помечен как обман, он явно был открыт в течение 3 лет, прежде чем был опубликован другой.
муру заслужил свои нашивки, и, хотя время от времени он проигрывает в своих суждениях, я доверяю ему закрыть этот вопрос, даже если он на 3 года старше, как вы говорите. Я не читал ни вопросов, ни ответов, но я предполагаю, что его суждение основано на том факте, что на другом есть лучшие ответы. Так совпало, что я только что реализовал: bash -c "echo $IntBrightness | sudo tee $backlight" > / dev / null
сегодня вечером, чтобы подавить нежелательный вывод терминала. Вы можете отметить это с помощью мода и попросить, чтобы все ответы кандидата-обманщика были объединены в этот вопрос и ответ. Хотя, похоже, это большая работа…
Я только что заметил, что вы были оперативником, а не прохожим. Я просмотрел оба вопроса и ответы и голосую за повторное рассмотрение вашего вопроса. Я думаю, что ваш более общий и соответствует моим потребностям сегодня вечером (избавление от “650” или “3000”, отображаемых на экране в зависимости от уровня яркости в ночное или дневное время. В то время как другой вопрос касается исключительно сообщений об ошибках (Дескриптор файла 2> / dev / null), одним из печально известных примеров является “Gtk transient parent” в Zenity и Yad, которые используют диалоговые окна вместо полных окон. Мой первоначальный комментарий был слишком поспешным… PS с форматированием: bash -c "echo $IntBrightness | sudo tee $backlight" > /dev/null