Как перенаправить вывод приложения в фоновом режиме на / dev / null


100

Я хотел бы перенаправить вывод, сгенерированный фоновым приложением в Linux, на / dev / null.

Я использую текстовый редактор kate, и он печатает все отладочные сообщения на терминале, которые я хотел бы перенаправить на / dev / null.

Есть идеи, как это сделать?

Спасибо


Взгляните на эту страницу. xaprb.com/blog/2006/06/06/what-does-devnull-21-mean
richard.g

Ответы:


230

Ты используешь:

yourcommand  > /dev/null 2>&1

Если он должен работать в фоновом режиме, добавьте &

yourcommand > /dev/null 2>&1 &

>/dev/null 2>&1означает перенаправление stdoutна /dev/nullИ stderrв то место, где stdoutуказывает в то время

Если вы хотите, stderrчтобы это происходило на консоли и только stdoutпереходя к /dev/nullвам, вы можете использовать:

yourcommand 2>&1 > /dev/null

В этом случае stderrон перенаправляется stdout(например, на вашу консоль), а затем оригинал stdoutперенаправляется на/dev/null

Если программа не должна завершаться, вы можете использовать:

nohup yourcommand &

Без каких-либо параметров все выходные данные попадают в nohup.out


оба работают, но есть небольшая разница, но не
запомните

ах ок, понял и добавил другую версию
evildead

Если это последняя команда в файле bash, я заметил одну вещь: она покидает командную консоль, которая вызвала файл, без приглашения.
Деннис

@elig перенаправление вывода уже запущенного приложения невозможно, по крайней мере, не так просто, потому что перенаправление через dup2()происходит сразу после, fork()но раньше exec*(). После exec*()выполнения программы оболочка не имеет возможности перенаправить вывод этого процесса. Поправьте меня, если я ошибаюсь, но я не знаю об оболочке, в которой реализована такая функциональность.
evildead

3

Они также перенаправят оба:

yourcommand  &> /dev/null

yourcommand  >& /dev/null

хотя в руководстве по bash говорится, что первый предпочтительнее.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.