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

Ответы:

68

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

$ program > /dev/null

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

$ program &> /dev/null

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

theotherreceive
источник
Первый не сработал для 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 в любом случае.

Vike
источник
Мой stty по умолчанию в Debian / Arch не имеет этих опций.
Хендри
Я должен был, конечно, упомянуть, что я даже не был в операционной системе OP. Отредактировал мой пост.
вики