Jak ukryć wyjście terminala podczas wykonywania polecenia?

62

Kiedy uruchamiam niektóre programy z wiersza poleceń, takie jak Eclipse i przeglądarka dokumentów w 11.10, wyrzuca mnóstwo informacji, które wydają się nieistotne.

Również gdy są uruchamiane w tle, czasami kontynuują wytwarzanie danych wyjściowych na terminalu, nad którym obecnie pracuję, co jest irytujące.

Chciałbym, aby po prostu uruchomili i trzymali elementy tła w tle. Moje rozumowanie jest takie, że jeśli uruchamiasz te programy za pomocą GUI (np. Dwukrotne kliknięcie ikony), te wiadomości nigdy nie są mi pokazywane, więc nie potrzebuję ich w wierszu poleceń.

Anake
źródło

Odpowiedzi:

81

Jeśli możesz uniknąć pisania rzeczy w konsoli, zależy to od sposobu tworzenia danych wyjściowych z programu. Jeśli jest przesyłany strumieniowo do standardowego wyjścia, wystarczy to zrobić

$ eclipse >/dev/null

i nie należy generować żadnych wyników.

Aby ukryć również komunikaty o błędach:

$ eclipse >/dev/null 2>&1

Lub w skrócie, po prostu:

$ eclipse &>/dev/null

Ale jeśli zrobią to inaczej, może być problem z zatrzymaniem pisania w konsoli.

jeśli to możliwe, skorzystaj z rozwiązania podanego przez MuffinStateWide

Nędza
źródło
2
Może chciałbym się tego eclipse 2&>1 >/dev/nullpozbyć stderr. Domyślnie przekierowuje tylko stdout. I nie ma „innego” sposobu, aby to zrobić, jeśli wyczyścisz stdout i stderr do pustki, nie będzie żadnych wyników.
TC1,
@ TC1 Zasadniczo program może ponownie otworzyć / dev / tty i wydrukować tam wynik. W praktyce programy GUI tego nie zrobią.
Random832
@ Random832 Cóż, w zasadzie sugerowałbym przesłanie tego stderra do / dev / dsp lub aplay dla dodatkowego lulz ... :) Ale masz rację, teoretycznie można to zrobić w praktyce - prawdopodobnie przynajmniej napisz raczej nieuprzejmy e-mail do faceta, który to zrobił.
TC1
5
@ TC1 „2> & 1> / dev / null” przekieruje stdout do segmentu bitów, ale stderr nie zostanie przekierowany. Musisz odwrócić kolejność i zrobić: „> / dev / null 2> & 1”
William Pursell,
9
można też zrobić tak: eclipse &> /dev/null. Łapie zarówno stdin, jak i stderr do punktu przekierowania (w bash)
warren
12

Możesz utworzyć funkcję bash, która spowoduje alias nazwy polecenia i doda dodatkową funkcjonalność, aby osiągnąć to, o co prosisz.

Na przykład: powiedzmy, że chcesz uruchomić gvim(edytor tekstu GUI) z wiersza poleceń.

możesz napisać taką funkcję:

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

(dodaj tę funkcję do pliku .bashrclub .bash_aliasespliku, aby zawsze była ładowana)

Wyjaśnienie:

  • spowoduje to alias gvimpolecenia z nazwą funkcji bash gvim(więc gdy gvimnapiszesz w linii poleceń bash, wywoła twoją gvimfunkcję, a nie wykonanie gvimpolecenia rzeczywistego . Twoja funkcja następnie wywołuje prawdziwe gvimpolecenie (i akceptuje jego regularne argumenty), z niektóre dodane funkcje:

    • przekierowuje stdout i stderr na /dev/null(pomija wyjście do terminala)
    • używa &do uruchomienia polecenia w tle (aby twoja powłoka nie była zablokowana)
    • służy disowndo usuwania zadania w tle z powłoki (aby nie pojawiło się na liście aktywnych zadań)
    • używa nohupdo odłączenia procesu od terminala (abyś mógł zakończyć sesję powłoki lub zamknąć terminal bez zabijania procesu)
Corey Goldberg
źródło
przy okazji, myślę, że jest to bardziej kompleksowe rozwiązanie niż zaakceptowana odpowiedź @Misery
Corey Goldberg
6

spróbuj dodać --help jako przełącznik poleceń i poszukaj „quiet”, to powinno powstrzymać dane wyjściowe lub po prostu uruchomić z GUI. i uruchom za pomocą przełącznika lub znajdź sposób, aby go wyłączyć za pomocą skryptu

osobiście uruchamiam z cli, aby uzyskać ten wynik, więc nie jestem pewien, czy jest to możliwe we wszystkich aplikacjach GUI.

MuffinStateWide
źródło