Как скрыть вывод приложения оболочки в Linux?


Ответы:


68

Вы можете перенаправить вывод любой программы, чтобы он не был виден.

$ program > /dev/null

Это перенаправит стандартный вывод - вы все равно увидите ошибки

$ program &> /dev/null

Это перенаправит все выходные данные, включая ошибки.


Первый не сработал для wget
Jader Dias

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

2
Кстати, вы можете сохранить этот вывод wget в файле журнала, поэтому, когда / если загрузка перестает работать, вы можете выяснить, почему. Если это все равно в сценарии. Если это одноразовый забег, то да, в мусорную корзину
Мэтт Симмонс

1
Потому что wgetвы можете использовать -qпараметры, чтобы сделать это тихо.
Пхамре

Любой способ подавить вывод, записанный непосредственно в / dev / tty?
d11wtq

30

В командной строке доступно три устройства ввода-вывода.

 standard in - 0 
 standard out - 1 
 standard error - 2 

Чтобы перенаправить стандартный вывод (вывод по умолчанию) в файл (и перезаписать файл), используйте

 command > file.log 

Чтобы добавить файл file.log, используйте 2> s

 command >> file.log

чтобы перенаправить стандартную ошибку в файл file.log, используйте

 command 2> file.log

и добавить

 command 2>> file.log

Объединить результаты в один поток и отправить их все в одно место.

 command > file.log 2>&1 

Это отправляет 2 (stderr) в 1 (stdout) и отправляет stdout в file.log

Обратите внимание, что также возможно перенаправить стандарт в команду, ожидающую стандартного ввода.

 command << file.txt 

РЕДАКТИРОВАТЬ
Для более подробной информации, ознакомьтесь с Advanced Bash Scripting Guide


Может кто-нибудь объяснить, как command > file.log 2>&1работает?
Кори Кляйн

На каком низком уровне вы хотели бы знать?
Мэтт Симмонс

3
@nomoreink: на самом деле это 2 команды, одна есть, > fileа вторая есть 2>&1. Первый перенаправляет стандарт в файл. Второй берет второй файловый дескриптор и перенаправляет его на первый. Вы можете сделать обратное, перенаправить стандартный вывод на стандартную ошибку, >&2а затем перенаправить стандартную ошибку в файл с помощью 2> file.
Хьюберт Карио

12

Спрятать stdout

./command >/dev/null

Скрыть stdoutиstderr

./command >/dev/null 2>&1

Скрыть stdoutи stderrотпустить терминал (запустите команду в фоновом режиме)

./command >/dev/null 2>&1 &

3

Если вы просто хотите скрыть вывод (а не сохранить его в файл), вы можете использовать:

Отредактировано:

$ command &> / dev / null


Это перенаправит вывод в файл с именем null
theotherreceive

Он сгенерировал нулевой файл
Jader Dias

1
Вы бы не имели в виду / dev / null, не так ли?
Бабу

1
Да, я бы, Бабу. Я имел в виду $ command &> / dev / null. Я извиняюсь за то, что печатал слишком быстро для моего же блага.
Лучо

2

Для Mac OS X (10.6 «Снежный барс»):

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

stty flusho; command ;stty -flusho

или если вы просто хотите скрыть ввод из терминала, кстати:

stty  -echo; command ;stty  echo

Смотрите stty (1) справочную страницу для получения дополнительной информации

Для Linux все, что я знаю, это то, что Ubunutu (10.04 "Lucid") и некоторые "Debian / Arch" (прокомментировано ниже - tnx hendry) не имеют flushoнастройки (и я не вижу ничего другого подходящего на man-странице) , echoУстановка работает на Ubuntu в любом случае.


Мой stty по умолчанию в Debian / Arch не имеет этих опций.
Хендри

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