Ответы:
Следующее посылает стандартный вывод на нулевое устройство (битовая корзина).
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
echo foo > $(tty)
скрипт и запустите ./test.sh &> /dev/null
- вывод все еще выводится на терминал. Конечно, это не проблема, если вы пишете скрипт, который не использует такие команды.
/dev/null
существует в Cygwin, вам не нужно использовать nul
.
Что-то вроде
script > /dev/null 2>&1
Это предотвратит стандартный вывод и вывод ошибок, перенаправляя их обоих /dev/null
.
2>/dev/null
Пытаться
: $(yourcommand)
:
это сокращение от "ничего не делать".
$()
это просто ваша команда.
0
(успех). Давайте посмотрим на пример использования команды, false
которая всегда возвращает 1
(сбой). Например ( echo foo | tee file ; false ) && echo bar
отображает foo
. Использование трюк , чтобы подавить вывод: ( : $(echo foo | tee file ; false) ) && echo bar
. Но он отображает bar
значение кода возврата 0
(это не код возврата из false
). Пожалуйста, обновите свой ответ с учетом этого ограничения. Приветствия
DUMMY=$(yourcommand)
? Это не имеет ограничений, которые вы упомянули. :)
DUMMY=$( echo foo | tee file ; false ) && echo bar
ничего не отображает. И команда DUMMY=$( echo foo | tee file ; true ) && echo bar
отображает bar
. Дайте мне знать, если вы дадите ответ, чтобы подтвердить это ;-) Cheers
Альтернативой, которая может подходить в некоторых ситуациях, является присвоение результата команды переменной:
$ DUMMY=$( grep root /etc/passwd 2>&1 )
$ echo $?
0
$ DUMMY=$( grep r00t /etc/passwd 2>&1 )
$ echo $?
1
Поскольку Bash и другие интерпретаторы командной строки POSIX не рассматривают присвоение переменных как команду, код возврата настоящей команды соблюдается.
Примечание: присвоение с ключевым словом typeset
or declare
рассматривается как команда, поэтому в качестве оценочного кода возврата в данном случае используется само присвоение, а не команда, выполняемая в вложенной оболочке:
$ declare DUMMY=$( grep r00t /etc/passwd 2>&1 )
$ echo $?
0
Как и в посте andynormancx , используйте это (если вы работаете в среде Unix):
scriptname > /dev/null
Или вы можете использовать это (если вы работаете в среде Windows):
scriptname > nul
> nul
в Windows с Cygwin или Git Bash, и теперь вы застряли с 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
>>
)?