Как подавить весь вывод команды используя Bash? - PullRequest
264 голосов
/ 06 марта 2009

У меня есть скрипт bash, который запускает программу с параметрами. Эта программа выводит некоторый статус (делает это, делает это ...). Эта программа не может быть тихой. Как я могу предотвратить отображение сценарием чего-либо?

Я ищу что-то вроде окна "эхо выключено".

Ответы [ 7 ]

467 голосов
/ 06 марта 2009

Следующая команда отправляет стандартный вывод на нулевое устройство (битовая корзина).

scriptname >/dev/null

и если вы также хотите, чтобы сообщения об ошибках отправлялись туда, используйте одно из (первое может работать не во всех оболочках):

scriptname &>/dev/null
scriptname >/dev/null 2>&1
scriptname >/dev/null 2>/dev/null

и, если вы хотите записать сообщения, но не видите их, замените /dev/null реальным файлом, например:

scriptname &>scriptname.out

Для полноты, в Windows cmd.exe (где "nul" является эквивалентом "/ dev / null"), это:

scriptname >nul 2>nul
41 голосов
/ 06 марта 2009

Что-то вроде

script > /dev/null 2>&1

Это предотвратит стандартный вывод и с ошибкой, перенаправив их обоих на /dev/null.

11 голосов
/ 23 сентября 2015

Попробуйте

: $(yourcommand)

: означает «ничего не делать».

$() это просто ваша команда.

7 голосов
/ 18 марта 2016

Альтернативой, которая может подходить в некоторых ситуациях, является присвоение результата команды переменной:

$ DUMMY=$( grep root /etc/passwd 2>&1 )
$ echo $?
0
$ DUMMY=$( grep r00t /etc/passwd 2>&1 )
$ echo $?
1

Поскольку Bash и другие интерпретаторы командной строки POSIX не рассматривают присвоение переменных как команду, код возврата настоящей команды соблюдается.

Примечание: присвоение с ключевым словом typeset или declare рассматривается как команда, поэтому в качестве проверяемого кода возврата в случае используется само присвоение, а не команда, выполняемая в под-оболочке:

$ declare DUMMY=$( grep r00t /etc/passwd 2>&1 )
$ echo $?
0
5 голосов
/ 06 марта 2009

Как и в сообщении andynormancx, используйте это: (если вы работаете в среде Unix)

scriptname > /dev/null

или вы можете использовать это: (если вы работаете в среде Windows)

scriptname > nul
4 голосов
/ 10 мая 2017

Взгляните на этот пример из Проект документации Linux :

3.6 Образец: файл stderr и stdout 2

Это поместит каждый вывод программы в файл. Иногда это подходит для записей cron, если вы хотите, чтобы команда передавалась в абсолютном молчании.

     rm -f $(find / -name core) &> /dev/null 

Тем не менее, вы можете использовать это простое перенаправление:

/path/to/command &>/dev/null
1 голос
/ 17 июня 2017

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

some_code 2>>/dev/null

Или вы также можете попробовать

some_code >>/dev/null
...