Как скрыть вывод команды в bash

Я хочу сделать мои сценарии bash более элегантными для конечного пользователя. Как скрыть вывод, когда bash выполняет комманды. Например, когда выполняется bash

yum install nano 

Ниже будет показано пользователю, выполнившему bash

 Loaded plugins: fastestmirror base | 3.7 kB 00:00 base/primary_db | 4.4 MB 00:03 extras | 3.4 kB 00:00 extras/primary_db | 18 kB 00:00 updates | 3.4 kB 00:00 updates/primary_db | 3.8 MB 00:02 Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package nano.x86_64 0:2.0.9-7.el6 will be installed --> Finished Dependency Resolution Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: nano x86_64 2.0.9-7.el6 base 436 k Transaction Summary ================================================================================ Install 1 Package(s) Total download size: 436 k Installed size: 1.5 M Downloading Packages: nano-2.0.9-7.el6.x86_64.rpm | 436 kB 00:00 warning: rpmts_HdrFromFdno: Header V3 RSA/SHA256 Signature, key ID c105b9de: NOKEY Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 Importing GPG key 0xC105B9DE: Userid : CentOS-6 Key (CentOS 6 Official Signing Key)  Package: centos-release-6-4.el6.centos.10.x86_64 (@anaconda-CentOS-201303020151.x86_64/6.4) From : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Installing : nano-2.0.9-7.el6.x86_64 1/1 Verifying : nano-2.0.9-7.el6.x86_64 1/1 Installed: nano.x86_64 0:2.0.9-7.el6 Complete! 

Теперь я хочу скрыть это от пользователя и вместо этого показать

 Installing nano ...... 

Как я могу выполнить эту задачу. Я определенно помогу сделать скрипт более удобным для пользователя. В случае возникновения ошибки он должен быть показан пользователю.

Редактировать Мне хотелось бы знать, как показывать такое же сообщение, пока выполняется набор команд

Использовать это.

 { /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 рассматривает это как группу команд , объединяя дескрипторы выходных файлов, чтобы вы могли перенаправить все сразу. Если вы знакомы с подshellми с помощью синтаксиса ( command1; command2; ) , вы обнаружите, что фигурные скобки ведут себя почти точно так же, за исключением того, что, если вы не вовлечете их в трубу, скобки не будут создавать подоболочку и, таким образом, позволят вы должны установить переменные внутри.

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

См. Руководство по bash по перенаправлениям для получения более подробной информации, параметров и синтаксиса.

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

yum install nano > /dev/null

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

yum install nano &> /dev/null .

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

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

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

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

 MyCommand >/dev/null 

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

 MyCommand 2>/dev/null 

Если вы хотите оба выкл , вы можете сделать:

 MyCommand 2>&1 >/dev/null 

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

Вы можете перенаправить вывод на /dev/null . Для получения дополнительной информации о / 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 .

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

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

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

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

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

 yum install nano >/dev/null 2>&1 
 .SILENT: 

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

  • Понимание команды через оболочку adb и через код - Android
  • Что такое / dev / null 2> & 1?
  • Как запустить файлы в C #
  • Как копировать ввод-вывод, а не просто перенаправлять (Windows и Linux)
  • Как добавить вывод в конец текстового файла в сценарии оболочки / bash
  • Удаление повторяющихся строк без сортировки
  • Ошибка Java: неявный супер-конструктор не определен для конструктора по умолчанию
  • Метод exec () Runtime не перенаправляет вывод
  • Как выполнить XPath one-liners из оболочки?
  • ITunes OS X полный системный сбой cont'd: плохой файл мультимедиа виновник? Как его изолировать?
  • Запустите JAR-файл из командной строки и укажите путь к classам
  • Давайте будем гением компьютера.