От новичка до гуру: Курсы программирования на CyberDuff

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

У меня есть сценарий Bash, который запускает программу с параметрами. Эта программа выводит некоторый статус (делает то, делает то ...). У этой программы нет возможности быть тихой. Как я могу запретить скрипту что-либо отображать?

Я ищу что-то вроде "echo off" в Windows.

05.03.2009

Ответы:


1

Следующее отправляет стандартный вывод на нулевое устройство (битовый сегмент).

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
05.03.2009
  • Обратите внимание, что '& ›' присуще bash (и, возможно, оболочкам C); Оболочкам Korn и Bourne требуется 2 ›/ dev / null или 2› и 1 (для отправки stderr в то же место, что и stdout). Оболочка Korn, кажется, интерпретирует '& ›' как запуск материала до & в фоновом режиме, а затем выполняет перенаправление ввода-вывода для пустой команды. 06.03.2009
  • Обратите внимание, что некоторые команды записываются непосредственно в оконечное устройство, а не в стандартный вывод / ошибку. Чтобы проверить, поместите echo foo > $(tty) в сценарий и запустите ./test.sh &> /dev/null - вывод по-прежнему выводится на терминал. Конечно, это не проблема, если вы пишете сценарий, в котором такие команды не используются. 13.02.2013
  • @ l0b0, есть ли способ сделать tty сценария (или любой другой программы) другим, чтобы весь вывод перенаправлялся независимо от вашего примера? Я знаю, что screen и script могут делать что-то подобное, но оба привередливы и варьируются от * nix до * nix. 25.11.2014
  • @yang /dev/null существует в Cygwin, вам не нужно использовать nul. 31.01.2016

  • 2

    Что-то вроде

    script > /dev/null 2>&1
    

    Это предотвратит стандартный вывод и вывод ошибок, перенаправив их обоих на /dev/null.

    05.03.2009
  • Также достигается с помощью простого & ›, если вы хотите сэкономить на вводе;) 06.03.2009
  • Несмотря на то, что я добавляю это в свою команду gs (GhostScript), она все равно выводит **** Предупреждение: файл имеет поврежденный маркер %% EOF или мусор после %% EOF. Любой совет? 30.10.2014
  • Это не запускает процесс в системах unix, мне пришлось сделать 2>/dev/null 07.06.2020

  • 3

    Пытаться

    : $(yourcommand)
    

    : - это сокращение от «ничего не делать».

    $() - это просто ваша команда.

    23.09.2015
  • Очень интересно, но есть ограничение: всегда возвращается код состояния 0 (успех). Давайте посмотрим на пример использования команды false, которая всегда возвращает 1 (сбой). Например, ( echo foo | tee file ; false ) && echo bar отображает foo. Используя свой трюк для подавления вывода: ( : $(echo foo | tee file ; false) ) && echo bar. Но он отображает bar, что означает, что код состояния возврата - 0 (это не код состояния, возвращенный из false). Обновите свой ответ, указав это ограничение. Ваше здоровье 05.11.2015
  • @olibre, а как насчет DUMMY=$(yourcommand)? У него нет упомянутого вами ограничения. :) 14.03.2016
  • @semente Perfect: команда DUMMY=$( echo foo | tee file ; false ) && echo bar ничего не отображает. И команда DUMMY=$( echo foo | tee file ; true ) && echo bar отображает bar. Дайте мне знать, если вы дадите ответ, чтобы проголосовать за него ;-) Ура 17.03.2016

  • 4

    Альтернативой, которая может подходить в некоторых ситуациях, является присвоение результата команды переменной:

    $ 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
    
    18.03.2016

    5

    Как andynormancx 'post, используйте это (если вы работаете в среде Unix):

    scriptname > /dev/null
    

    Или вы можете использовать это (если вы работаете в среде Windows):

    scriptname > nul
    
    05.03.2009
  • Вы действительно можете сделать лучше, чем в оболочке Windows. Если вместо этого вы используете имя сценария ›nul, у вас даже не будет файла для удаления, поскольку nul является эквивалентом / dev / null для Windows. 06.03.2009
  • @andynormancx: Это то, что я ненавижу в структуре файловой системы Windows. Он резервирует имена файлов, такие как NUL, COM1, LPT1, CON и т. Д., Независимо от того, в каком каталоге вы находитесь (даже если вы находитесь в файловой системе, которая может иметь эти имена файлов, например, в сетевых папках). 06.03.2009
  • Не думаю, что я действительно использовал NUL с DOS 5.x, внезапно вспомнил, когда увидел этот ответ;) 09.03.2009
  • Если вы использовали > nul в Windows с cygwin или git bash, а теперь застряли с файлом nul, который нельзя удалить, попробуйте этот ответ, он сработал как шарм. 04.02.2020

  • 6

    Взгляните на этот пример из Проект документации Linux:

    3.6. Пример: файл stderr и stdout 2

    Это поместит каждый вывод программы в файл. Иногда это подходит для записей cron, если вы хотите, чтобы команда проходила в абсолютной тишине.

         rm -f $(find / -name core) &> /dev/null 
    

    Тем не менее, вы можете использовать это простое перенаправление:

    /path/to/command &>/dev/null
    
    09.05.2017

    7

    Это еще один вариант

    scriptname |& :
    
    12.02.2013
  • Я думаю, что это, вероятно, лучший вариант, учитывая, что он не требует буферизации вывода команды в памяти. 14.05.2021

  • 8

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

    some_code 2>>/dev/null
    

    Или вы также можете попробовать

    some_code >>/dev/null
    
    17.06.2017
  • никогда не видел ›› в / dev / null .. из любопытства .. Зачем вы это делаете? 20.11.2019
  • Подавляет ли он весь вывод? 21.02.2020
  • Почему двойной ›(>>)? 04.06.2020
  • Использование ›› для обнуления необязательно и несколько некорректно, но в данном случае безвредно. 24.07.2020
  • Новые материалы

    Основы Spring: Bean-компоненты, контейнер и внедрение зависимостей
    Как лего может помочь нашему пониманию Когда мы начинаем использовать Spring, нам бросают много терминов, и может быть трудно понять, что они все означают. Итак, мы разберем основы и будем..

    Отслеживание состояния с течением времени с дифференцированием снимков
    Время от времени что-то происходит и революционизирует часть моего рабочего процесса разработки. Что-то более забавное вместо типичного утомительного и утомительного процесса разработки. В..

    Я предполагаю, что вы имеете в виду методы обработки категориальных данных.
    Я предполагаю, что вы имеете в виду методы обработки категориальных данных. Пожалуйста, проверьте мой пост Инструментарий специалиста по данным для кодирования категориальных переменных в..

    Игра в прятки с данными
    Игра в прятки с данными Я хотел бы, чтобы вы сделали мне одолжение и ответили на следующие вопросы. Гуглить можно в любое время, здесь никто не забивается. Сколько регионов в Гане? А как..

    «Раскрытие математических рассуждений с помощью Microsoft MathPrompter и моделей больших языков»
    TL;DR: MathPrompter от Microsoft показывает, как использовать математические рассуждения с большими языковыми моделями; 4-этапный процесс для улучшения доверия и рассуждений в математических..

    Раскройте свой потенциал в области разработки мобильных приложений: Абсолютная бесплатная серия
    Глава 6: Работа в сети и выборка данных Глава 1: Введение в React Native Глава 2: Основы React Native Глава 3: Создание пользовательского интерфейса с помощью React Native Глава 4:..

    Все о кейсах: Camel, Snake, Kebab & Pascal
    В программировании вы сталкивались с ними при именовании переменной, класса или функции. Поддержание согласованности типов и стилей случаев делает ваш код более читабельным и облегчает совместную..