Как скрыть вывод терминала при выполнении команды?


62

Когда я запускаю определенные программы из командной строки, такие как eclipse и просмотрщик документов в 11.10, он извергает массу информации, которая кажется несущественной.

Также, когда они работают в фоновом режиме, они иногда продолжают выводить данные на терминал, над которым я сейчас работаю, что раздражает.

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


Ответы:


81

Если вы можете избежать записи чего-либо в консоли, это зависит от того, как создается вывод из программы. Если он передается на стандартный вывод, то этого достаточно

$ eclipse >/dev/null

и никакой вывод не должен быть сделан.

Для подавления сообщений об ошибках также:

$ eclipse >/dev/null 2>&1

Или в bash, просто:

$ eclipse &>/dev/null

Но если они делают это как-то по-другому, то может быть проблемой остановить их запись в консоли.

если возможно, используйте решение, данное MuffinStateWide


2
Может быть, хочу сделать это, eclipse 2&>1 >/dev/nullчтобы избавиться от stderr. По умолчанию только перенаправления stdout. И нет «другого» способа сделать это, если вы удалите и stdout, и stderr в пустоту, не будет никакого выхода.
TC1

@ TC1 В принципе, программа может открыть / dev / tty и распечатать вывод. На практике программы с графическим интерфейсом не делают этого.
Random832

@ Random832 Ну, в принципе, я бы предложил передать этот stderr в / dev / dsp или aplay для дополнительных lulz ... :) Но вы правы, в теории это можно было бы сделать на практике - я бы, наверное, хотя бы напишите довольно невежливое письмо парню, который это сделал.
TC1

5
@ TC1 "2> & 1> / dev / null" перенаправит стандартный вывод в область битов, но stderr не будет перенаправлен. Вам нужно изменить порядок и сделать: "> / dev / null 2> & 1"
Уильям Перселл

9
Вы также можете сделать только: eclipse &> /dev/null. Это ловит как stdin, так и stderr в точку перенаправления (в bash)
Уоррен

12

Вы можете создать функцию bash, которая будет псевдонимом имени команды и добавит некоторые дополнительные функции для достижения того, что вы просите.

Например: допустим, вы хотите запустить gvim(текстовый редактор GUI) из командной строки.

Вы могли бы написать такую ​​функцию:

function gvim () {
    nohup gvim "$@" > /dev/null 2>&1 & disown
}

(добавьте эту функцию в ваш файл .bashrcили .bash_aliasesфайл, чтобы она всегда загружалась)

Объяснение:

  • это будет псевдонимом gvimкоманды с функцией bash, также названной gvim(поэтому, когда вы gvimнабираете в приглашении bash, она будет вызывать вашу gvimфункцию, а не выполнять настоящую gvimкоманду. Затем ваша функция вызывает реальную gvimкоманду (и принимает ее обычные аргументы), с некоторые дополнительные функции:

    • перенаправляет stdout и stderr на /dev/null(подавляет вывод на терминал)
    • используется &для запуска команды в фоновом режиме (чтобы ваша оболочка не блокировалась)
    • используется disownдля удаления фонового задания из оболочки (чтобы оно не отображалось в списке активных заданий)
    • используется nohupдля отсоединения процесса от терминала (чтобы вы могли завершить сеанс оболочки или закрыть свой терминал, не прерывая процесс)

Кстати, я думаю, что это более всеобъемлющее решение, чем принятый ответ @Misery
Кори Голдберг

6

попробуйте добавить --help в качестве командного переключателя и посмотрите «тихо», это должно подавить вывод, или просто запустить из GUI. и запустить с переключателем или найти способ подавить его с помощью сценария

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.