Як приховати вихід програми оболонки в Linux?


Відповіді:


68

Ви можете перенаправити вихід будь-якої програми, щоб він не був видно.

$ program > /dev/null

Це перенаправить стандартний вихід - ви все одно побачите помилки

$ program &> /dev/null

Це дозволить перенаправити весь результат, включаючи помилки.


Перший не працював у wget
Jader Dias

Ось чому wget використовує stderr для деякого його виводу. Другий повинен працювати.
theoterreceive

2
Між іншим, можливо, ви захочете зберегти цей виджет wget у файлі журналу, тож коли / якщо завантаження перестане працювати, ви можете з'ясувати, чому. Якщо це все-таки в сценарії. Якщо це одноразовий запуск, то так, до сміття
Метт Сіммонс

1
Бо wgetви можете використовувати -qваріанти, щоб зробити це тихо.
pkhamre

Будь-який спосіб придушити вихід, написаний безпосередньо в / dev / tty?
d11wtq

30

У командному рядку доступні три пристрої вводу-виводу.

 standard in - 0 
 standard out - 1 
 standard error - 2 

Щоб перенаправити стандартний вихід (вихід за замовчуванням) на файл (і перезаписати файл), використовуйте

 command > file.log 

Щоб додати файл file.log, використовуйте 2> s

 command >> file.log

щоб перенаправити стандартну помилку до file.log, використовуйте

 command 2> file.log

і додати

 command 2>> file.log

Щоб об'єднати результати в один потік і відправити їх в одне місце

 command > file.log 2>&1 

Це посилає 2 (stderr) в 1 (stdout), а stdout надсилає до file.log

Зауважте, що також можна перенаправити стандарт в команду, яка очікує stdin

 command << file.txt 

EDIT
Детальніше див. У Посібнику з розширеного сценарію Bash


Хтось може пояснити, як command > file.log 2>&1працює?
Cory Klein

Наскільки низький рівень ви хотіли б знати?
Метт Сіммонс

3
@nomoreink: це насправді 2 команди, одна є, > fileа друга - 2>&1. Перший перенаправляє стандарт до файлу. Другий приймає дескриптор 2-го файлу і перенаправляє його до першого. Ви можете зробити зворотний, перенаправити стандартний вихід на стандартну помилку за допомогою, >&2а потім перенаправити стандартну помилку на файл із 2> file.
Хуберт Каріо

12

Сховати stdout

./command >/dev/null

Сховати stdoutіstderr

./command >/dev/null 2>&1

Сховати stdoutта stderrвідпустити термінал (запустіть команду у фоновому режимі)

./command >/dev/null 2>&1 &

3

Якщо ви просто хочете приховати вихід (а не зберегти його у файл), ви можете використовувати:

Відредаговано:

$ command &> / dev / null


Це призведе до перенаправлення виводу у файл під назвою null
theotherreceive

Він створив нульовий файл
Jader Dias

1
ти б не мав на увазі / dev / null, чи не так?
Бабу

1
Так, я мав би, Бабу. Я мав на увазі $ command &> / dev / null. Мої вибачення за те, що ви надто швидко набрали для власного блага.
Лучо

2

Для Mac OS X (10.6 "Snow Leopard"):

Якщо вам потрібно приховати вихід, не повідомляючи програмі про це, перевіривши дескриптор файлу виводу / помилок, ви можете спробувати скористатися наступним в оболонці:

stty flusho; command ;stty -flusho

або якщо ви просто хочете приховати вхід від терміналу:

stty  -echo; command ;stty  echo

Додаткову інформацію див. На сторінці керівництва stty (1)

Для Linux все, що я знаю, - це те, що Ubunutu (10.04 "Lucid") і деякі "Debian / Arch" (коментар нижче - tnx hendry) не мають flushoналаштувань (і я не бачу нічого іншого, що підходить на сторінці людини) . echoУстановка працює на Ubuntu в будь-якому випадку.


У моїй stty в Debian / Arch немає цих параметрів.
хендрі

Я, звичайно, повинен був зазначити, що я навіть не був в операційній системі ОП. Редагував мою публікацію.
віке
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.