Come nascondere l'output del terminale quando si esegue un comando?


62

Quando lancio determinati programmi dalla riga di comando come eclipse e visualizzatore di documenti in 11.10, viene visualizzato un carico di informazioni che sembrano insignificanti.

Inoltre, quando vengono eseguiti in background, a volte continuano a produrre output sul terminale su cui sto attualmente lavorando, il che è irritante.

Vorrei che avessero appena avviato e mantenuto lo sfondo in background. Il mio ragionamento è che se avvii questi programmi attraverso la GUI (ad esempio facendo doppio clic su un'icona) questi messaggi non mi vengono mai mostrati, quindi non mi servono nella riga di comando.


Risposte:


81

Se riesci a evitare di scrivere cose nella console, dipende da come viene creato l'output dal programma. Se viene trasmesso in streaming allo standard output, è sufficiente farlo

$ eclipse >/dev/null

e non dovrebbe essere prodotto alcun output.

Per eliminare anche i messaggi di errore:

$ eclipse >/dev/null 2>&1

O in bash, semplicemente:

$ eclipse &>/dev/null

Ma se lo fanno in qualche modo in modo diverso, potrebbe essere un problema impedirgli di scrivere nella console.

se possibile, utilizzare la soluzione fornita da MuffinStateWide


2
Potrebbe voler farlo eclipse 2&>1 >/dev/nullper sbarazzarsi di stderr. L'impostazione predefinita reindirizza solo stdout. E non esiste un modo "diverso" per farlo, se si eliminano sia stdout che stderr nel nether, non ci sarà output.
TC1

@ TC1 In linea di principio, un programma potrebbe riaprire / dev / tty e stampare qui l'output. In pratica, i programmi della GUI non lo faranno.
Casuale 832,

@ Random832 Beh, in linea di principio, suggerirei di eseguire il piping di quello stderr su / dev / dsp o aplay per extra lulz ... :) Ma hai ragione, in teoria si potrebbe fare, in pratica - probabilmente a almeno scrivi un'email piuttosto scortese al ragazzo che l'ha fatto.
TC1

5
@ TC1 "2> & 1> / dev / null" reindirizzerà stdout al bucket bit, ma stderr non verrà reindirizzato. Devi invertire l'ordine e fare: "> / dev / null 2> & 1"
William Pursell,

9
si può anche fare proprio: eclipse &> /dev/null. Che cattura sia lo stdin che lo stderr verso il punto di reindirizzamento (in bash)
warren

12

È possibile creare una funzione bash che alias un nome di comando e aggiungere alcune funzionalità extra per ottenere ciò che si sta chiedendo.

Ad esempio: supponiamo che tu voglia avviare gvim(un editor di testo gui) dalla riga di comando.

potresti scrivere una funzione come questa:

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

(aggiungi questa funzione al tuo .bashrco al .bash_aliasesfile in modo che sia sempre caricata)

Spiegazione:

  • questo alias il gvimcomando con una funzione bash anche chiamata gvim(quindi quando si digita gvimal prompt bash, chiamerà la tua gvimfunzione, anziché eseguire il gvimcomando reale . La tua funzione quindi chiama il gvimcomando reale (e accetta i suoi argomenti regolari), con alcune funzionalità aggiunte:

    • reindirizza stdout e stderr a /dev/null(elimina l'output al terminale)
    • usa &per eseguire il comando in background (quindi la tua shell non è bloccata)
    • utilizza disownper rimuovere il processo in background dalla shell (quindi non verrà visualizzato nell'elenco dei lavori attivi)
    • usa nohupper staccare il processo dal terminale (in modo da poter terminare la sessione di shell o chiudere il terminale senza uccidere il processo)

a proposito, penso che questa sia una soluzione più completa della risposta accettata da @Misery
Corey Goldberg

6

prova ad aggiungere --help come switch di comando e cerca "quiet", questo dovrebbe sopprimere l'output, o semplicemente lanciarsi dalla GUI. e avvialo con l'interruttore o trova un modo per eliminarlo tramite script

personalmente lancio da cli per ottenere quell'output, quindi non sono sicuro che sia possibile per tutte le app della GUI.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.