Запустить сценарии оболочки без сообщений [дублировать]

Без регулярного выражения:

str = str.split("\n").join("<br />");
62
задан user2650277 5 August 2013 в 17:21
поделиться

7 ответов

Используйте это.

{
  /your/first/command
  /your/second/command
} &> /dev/null

Объяснение

Чтобы исключить вывод команд, у вас есть две возможности:

  • Закройте выходной файл дескриптора , что не позволяет ему принимать какие-либо дополнительные данные. Это выглядит так:
    your_command "Is anybody listening?" >&-
    
    Обычно вывод идет либо в дескриптор файла 1 (stdout), либо 2 (stderr). Если вы закроете дескриптор файла, вам нужно будет сделать это для каждого нумерованного дескриптора, так как &> (ниже) является специальным синтаксисом BASH, несовместимым с >&-:
    /your/first/command >&- 2>&-
    
    Будьте внимательны, чтобы отметить порядок: >&- закрывает stdout , что вы хотите сделать; &>- перенаправляет stdout и stderr в файл с именем - (дефис), что не то, что вы хотите сделать. Сначала он будет выглядеть одинаково, но последний создает в вашем рабочем каталоге бродячий файл. Легко запомнить: >&2 перенаправляет stdout на дескриптор 2 (stderr), >&3 перенаправляет stdout в дескриптор 3, а >&- перенаправляет stdout в тупик (т. Е. Закрывает stdout). Также будьте осторожны, что некоторые команды могут не обрабатывать дескриптор закрытого файла особенно хорошо («write error: Bad file descriptor»), поэтому лучшим решением может быть ...
  • Перенаправить вывод на /dev/null , который принимает весь вывод и ничего не делает с ним. Это выглядит так:
    your_command "Hello?" > /dev/null
    
    Для перенаправления вывода в файл вы можете направить как stdout, так и stderr в одно и то же место очень кратко, но только в bash:
    /your/first/command &> /dev/null
    

Наконец, делать то же самое для нескольких команд сразу, окружать все это в фигурных скобках. Bash рассматривает это как группу команд , агрегируя дескрипторы выходных файлов, чтобы вы могли перенаправить все сразу. Если вы знакомы с подоболочками с использованием синтаксиса ( command1; command2; ), вы обнаружите, что фигурные скобки ведут себя почти точно так же, за исключением того, что, если вы не вовлечете их в трубу, скобки не будут создавать подоболочку и, таким образом, позволят вам установить переменные внутри.

{
  /your/first/command
  /your/second/command
} &> /dev/null

Для получения дополнительной информации, параметров и синтаксиса см. руководство bash о перенаправлениях .

191
ответ дан Jeff Bowman 22 August 2018 в 01:27
поделиться
  • 1
    и что, если я хочу использовать команду в инструкции if? – Flash Thunder 6 December 2016 в 18:35
  • 2
    @Flash Нет разницы, я думаю. – Jeff Bowman 6 December 2016 в 19:59
  • 3
    Когда вы перенаправляете его на / dev / null, он ничего не вернет в bash :-) – Flash Thunder 6 December 2016 в 20:27
  • 4
    @Flash if подсчитывает коды выхода, которые сохраняют перенаправление файлов, как указано выше. Если вы пытаетесь использовать $(foo) в тесте [ или [[, то вы правы, что $(foo &> /dev/null) ничего не вернет, но это все, что связано с заменой команды и не имеет ничего общего с if или [ / [[. Вы можете использовать $(foo 2>/dev/null) только для молчания stderr (дескриптор файла 2) и по-прежнему получать вывод подстановки команд. – Jeff Bowman 7 December 2016 в 18:54
  • 5
    ah thanx тогда :) – Flash Thunder 7 December 2016 в 22:16

Вы можете перенаправить вывод на /dev/null.

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

echo -n "Installing nano ......"; yum install nano > /dev/null; echo " done."; 

Перенаправить стандартный вывод на /dev/null, но не стандартная ошибка. Это покажет ошибки, возникающие во время установки, например, если yum не может найти пакет.

echo -n "Installing nano ......"; yum install nano &> /dev/null; echo " done.";

Пока этот код ничего не отображает в терминале, так как стандартная ошибка и стандартный вывод перенаправляются и, таким образом, аннулируются до /dev/null.

5
ответ дан Giuseppe Pes 22 August 2018 в 01:27
поделиться
  • 1
    Большая доля .... чувак вы можете показать мне, как выводить одно и то же сообщение только один раз для набора команд – user2650277 5 August 2013 в 17:40

Вы не должны использовать bash в этом случае, чтобы избавиться от вывода. У Yum есть опция -q, которая подавляет выход.

Вы, конечно же, также захотите использовать -y

echo "Installing nano..."
yum -y -q install nano

Чтобы просмотреть все параметры yum, используйте man yum.

4
ответ дан kkeller 22 August 2018 в 01:27
поделиться
  • 1
    Спасибо, я предположил, что у yum есть один, так как apt-get используется -qq, а также для подавления. Это было полезно для того, что я делаю. – Faded 25 September 2015 в 02:07

Вы можете перенаправить stdout в /dev/null.

yum install nano > /dev/null

Или вы можете перенаправить как stdout, так и stderr,

yum install nano &> /dev/null.

Но если у программы есть тихий вариант, это еще лучше.

25
ответ дан ktm5124 22 August 2018 в 01:27
поделиться

Обычно процесс имеет два выхода на экран: stdout (стандартный выход) и stderr (стандартная ошибка).

Обычно информационные сообщения переходят к sdout, а ошибки и предупреждения идут в stderr .

Вы можете отключить stdout для команды, выполнив

MyCommand >/dev/null

и выключить stderr, выполнив:

MyCommand 2>/dev/null

Если вы хотите выполнить оба действия:

MyCommand 2>&1 >/dev/null

2>&1 говорит, что send stderr находится на том же месте, что и stdout.

7
ответ дан Leon li 22 August 2018 в 01:27
поделиться

>/dev/null 2>&1 отключит звук stdout и stderr

yum install nano >/dev/null 2>&1
3
ответ дан Quanlong 22 August 2018 в 01:27
поделиться
.SILENT:

Введите «.SILENT:» в начале вашего скрипта без двоеточий.

-1
ответ дан Stephen Rauch 22 August 2018 в 01:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: