Как подавить все выходные данные команды с помощью Bash?
Вопрос
У меня есть скрипт bash, который запускает программу с параметрами.Эта программа выводит некоторый статус (делаю это, делаю то ...).У этой программы нет возможности работать тихо.Как я могу запретить скрипту что-либо отображать?
Я ищу что-то вроде Windows "echo off".
Решение
Следующая команда отправляет стандартный вывод на нулевое устройство (битовая корзина).
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
Другие советы
Что-то вроде
script > /dev/null 2>&1
Это предотвратит стандартный вывод ошибок и , перенаправив их обоих на / dev / null
.
Попробуй
: $(yourcommand)
:
это сокращение от "ничего не делать".
$()
это просто ваша команда.
Альтернативой, которая может подходить в некоторых ситуациях, является присвоение результата команды переменной:
$ 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
Как и в публикации andynormancx, используйте это: (если вы работаете в среде Unix)
scriptname > /dev/null
или вы можете использовать это: (если вы работаете в среде Windows)
scriptname > nul
Посмотрите на этот пример из документации Linux. Проект
3.6 Пример: файлы stderr и stdout 2
Это поместит каждый вывод программы в файл. Иногда это подходит для записей cron, если вы хотите, чтобы команда передавалась в абсолютном молчании.
rm -f $(find / -name core) &> /dev/null
Тем не менее, вы можете использовать это простое перенаправление:
/path/to/command &>/dev/null
В вашем скрипте вы можете добавить следующее к строкам, которые, как вы знаете, будут выводить:
some_code 2>>/dev/null
Или вы также можете попробовать
some_code >>/dev/null