Как выполнить команду в фоновом режиме без вывода, если нет ошибки?

Если вы занятой человек, то последнее, что вам нужно, это возиться с огромным количеством «бесполезных» уведомлений, так как же вы успокаиваетесь? В сегодняшней публикации SuperUser Q & A есть несколько отличных ответов, которые помогут читателю снизить объемы вывода.

Сегодняшняя сессия вопросов и ответов приходит к нам благодаря SuperUser — подразделению Stack Exchange, группы веб-сайтов вопросов и ответов, управляемой сообществом.

Вопрос

Считыватель SuperUser Xster хочет знать, как выполнить команду в фоновом режиме без вывода, если только нет ошибки:

Как вы подавляете вывод команды, но показываете ли это, если выход команды кодирует ошибку?

Как вы получаете команду для запуска в фоновом режиме без вывода, если нет ошибки?

Ответ

Авторы SuperUser Боб и Максимилиан Лаумейстер ответят за нас. Сначала Боб:

К сожалению, предположение, что stderr используется только для вывода ошибок, не всегда верно. Скорее, stderr часто используется для любого и всех интерактивных выводов и диагностики (т. Е. Выводов, предназначенных для чтения пользователем в интерактивном режиме). (1) wget и dd являются хорошо известными примерами.

Некоторые команды предоставляют флаг (т.е. -quiet или -silent ) для подавления вывода без ошибок. Прочтите их справочные страницы, чтобы увидеть, существует ли он

Другое соглашение, которое применяется чаще всего, это код выхода , программа возвращает код выхода при выходе. Обычно (2) , код выхода 0 указывает на успех, а любой другой код выхода указывает на ошибку.

С помощью bash вы можете получить код завершения последней команды из переменной $? . В fish используйте переменную $ status . Вы можете передать stderr во временный файл и распечатать его только в случае возникновения ошибки. Например ( fish ):

Вы также можете использовать некоторые сочетания клавиш, если вы не используете команды:

Или же:

Вы также можете передать stdout в тот же буфер, используя 2> & 1>/tmp/outputbuffer .

( Примечание: на самом деле я не знаю fish , поэтому я адаптирую концепцию к тому, что могу найти в ее документации. Синтаксис может быть немного неправильным. Кроме того, вы можете используйте mktemp для создания уникального временного файла. Запустите его и запишите имя файла в переменной.)

Если вам нужно запустить все это в фоновом режиме оболочки, которую вы также используете в интерактивном режиме в то же время, то вам лучше написать сценарий для обработки сокрытия вывода и запустить этот сценарий в фоновом режиме с помощью стандартных методов ( рыба ). Черт возьми, вы можете поместить что-то вроде следующей функции в ~/.config/fish/config.fish :

Вызовите с помощью run-silent somecommand & (где завершающий & заставляет его работать в фоновом режиме)

Обратите внимание, что это поглотит исходный код завершения и в случае сбоя сбросит как stdout , так и stderr . Вы можете настроить его по мере необходимости.

(1) Нет гарантии, что вывод ошибок не будет отображаться на stdout , некоторые программы будут выводить весь вывод там!

(2) К сожалению, это не всегда так. Код выхода полностью контролируется программой, и некоторые из них будут указывать некоторые условия успеха с ненулевыми выходами. Снова, проверьте руководство.

Далее следует ответ Максимиллиана Лаумейстера:

Утилиты Unix отправляют общие сообщения stdout , а сообщения об ошибках — stderr , поэтому, если мы хотим видеть только сообщения об ошибках, тогда будет достаточно подавить stdout так, чтобы только stderr получал вывод на консоль.

Способ сделать это (как в bash , так и в fish ) — добавить к команде >/dev/null . Это перенаправляет stdout в небытие, но stderr (с вашими сообщениями об ошибках) все еще проходит через консоль.

Так, например:

Команда echo 1>/dev/null ничего не печатает, поскольку обычный вывод stdout подавлен, и ничего не было записано в stderr .

Команда man doesnotexist>/dev/null печатает сообщение об ошибке, поскольку man записывает свое сообщение об ошибке в stderr .

Есть что добавить к объяснению? Отключить звук в комментариях. Хотите узнать больше ответов от других опытных пользователей Stack Exchange? Ознакомьтесь с полной веткой обсуждения здесь.

Оцените статью
TutoryBird.Ru
Добавить комментарий