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ń.


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


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)

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.