it-swarm.com.ru

Как подавить весь вывод команды используя Bash?

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

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

264
6bytes

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

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
467
andynormancx

Что-то вроде

script > /dev/null 2>&1

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

41
Diego Sevilla

Пытаться

: $(yourcommand)

: - это сокращение от "ничего не делать".

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

11
V0idSt4r

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

$ 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
7
semente

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

scriptname > /dev/null

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

scriptname > nul
5
Lucas Gabriel Sánchez

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

3.6 Пример: файлы stderr и stdout 2

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

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

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

/path/to/command &>/dev/null
4
ivanleoncz

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

some_code 2>>/dev/null

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

some_code >>/dev/null
1
Rohan Dsouza