Как подавить все выходные данные команды с помощью Bash?

StackOverflow https://stackoverflow.com/questions/617182

  •  03-07-2019
  •  | 
  •  

Вопрос

У меня есть скрипт 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top