Як приховати вихідний термінал при виконанні команди?


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 і надрукувати там вихід. На практиці програми GUI цього не роблять.
Випадково832

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

5
@ TC1 "2> & 1> / dev / null" перенаправить stdout у бітове відро, але stderr не буде переспрямовано. Вам потрібно змінити замовлення і зробити: "> / dev / null 2> & 1"
William Pursell

9
Ви також можете зробити тільки: eclipse &> /dev/null. Це підхоплює і stdin, і stderr до точки переспрямування (в баші)
warren

12

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

Наприклад: скажімо, ви хочете запустити gvim(редактор тексту gui) з командного рядка.

Ви можете написати таку функцію:

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

(додайте цю функцію у свій файл .bashrcчи .bash_aliasesфайл, щоб він завжди завантажувався)

Пояснення:

  • це надасть псевдонім gvimкоманді з функцією bash, також названою gvim(тому, коли ви вводите команду gvimbash, вона буде викликати вашу gvimфункцію, а не виконувати реальну gvimкоманду. Потім ваша функція викликає реальну gvimкоманду (і приймає її регулярні аргументи), з деякі додаткові функції:

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

btw, я думаю, це більш комплексне рішення, ніж прийнята відповідь від @Misery
Corey Goldberg

6

спробуйте додати --help як командний перемикач і шукайте "тихо", це повинно придушити вихід, або просто запустити з GUI. і запустити за допомогою перемикача або знайти спосіб придушити його через скрипт

особисто я запускаю з cli, щоб отримати цей вихід, так що я не впевнений, що це можливо для всіх програм GUI.

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