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

100

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

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

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

Спасибо

Kiran
источник
Взгляните на эту страницу. 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 говорится, что первый предпочтительнее.

Джим Ханзикер
источник