Come nascondere l'output di un'applicazione shell in Linux?


Risposte:


68

Puoi reindirizzare l'output di qualsiasi programma in modo che non sia visibile.

$ program > /dev/null

Questo reindirizzerà l'output standard: vedrai ancora eventuali errori

$ program &> /dev/null

Questo reindirizzerà tutto l'output, inclusi gli errori.


Il primo non ha funzionato per wget
— Jader Dias,

Ecco perché wget usa stderr per alcuni dei suoi output. Il secondo dovrebbe funzionare.
— theotherreceive,

2
Per inciso, potresti voler salvare l'output di wget in un file di registro, quindi quando / se il download smette di funzionare, puoi capire perché. Se è comunque in una sceneggiatura. Se si tratta di una corsa una tantum, allora sì, nel cestino
— Matt Simmons,

1
Perché wgetpuoi usare le -qopzioni per renderlo silenzioso.
— pkhamre,

Un modo per sopprimere l'output scritto direttamente su / dev / tty?
— d11wtq,

30

Ci sono tre IO Device disponibili sulla riga di comando.

 standard in - 0 
 standard out - 1 
 standard error - 2 

Per reindirizzare lo standard out (l'output predefinito) su un file (e sovrascriverlo), utilizzare

 command > file.log 

Per aggiungere a file.log, usa 2> s

 command >> file.log

per reindirizzare l'errore standard su file.log, utilizzare

 command 2> file.log

e da aggiungere

 command 2>> file.log

Per combinare gli output in un flusso e inviarli tutti in un unico posto

 command > file.log 2>&1 

Questo invia 2 (stderr) in 1 (stdout) e invia stdout a file.log

Si noti che è anche possibile reindirizzare lo standard in un comando che prevede lo stdin

 command << file.txt 

MODIFICA
Per maggiori dettagli, consulta la Guida agli script avanzati di Bash


Qualcuno può spiegare come command > file.log 2>&1funziona?
— Cory Klein,

Quanto in basso vorresti sapere?
— Matt Simmons,

3
@nomoreink: in realtà sono 2 comandi, uno è > filee il secondo è 2>&1. Il primo reindirizza lo standard su un file. Il secondo prende il secondo descrittore di file e lo reindirizza al primo. È possibile eseguire il contrario, reindirizzare l'output standard su errore standard utilizzando >&2e quindi reindirizzare l'errore standard su un file con 2> file.
— Hubert Kario,

12

Nascondere stdout

./command >/dev/null

Nascondi stdoutestderr

./command >/dev/null 2>&1

Nascondi stdoute stderrrilascia il terminale (esegui il comando in background)

./command >/dev/null 2>&1 &

3

Se vuoi solo nascondere l'output (e non salvarlo in un file), puoi usare:

Modificato:

$ command &> / dev / null


Questo reindirizzerà l'output su un file chiamato null
— theotherreceive

Ha generato un file null
— Jader Dias,

1
non avresti significato / dev / null, vero?
— Babu,

1
Sì, l'avrei fatto, Babu. Intendevo $ command &> / dev / null. Mi scuso per aver digitato troppo velocemente per il mio bene.
— Lucho,

2

Per Mac OS X (10.6 "Snow Leopard"):

Se è necessario nascondere l'output senza farlo conoscere al programma controllando il descrittore del file di output / errore, è possibile provare a utilizzare quanto segue in una shell:

stty flusho; command ;stty -flusho

o se vuoi solo nascondere l'input dal terminale a proposito:

stty  -echo; command ;stty  echo

Vedere la pagina di manuale stty (1) per ulteriori informazioni

Per Linux tutto quello che so è che Ubunutu (10.04 "Lucid") e alcuni "Debian / Arch" (commentati sotto - tnx hendry) non hanno l' flushoimpostazione (e non riesco a vedere nulla di appropriato nella pagina di manuale ) . L' echoimpostazione funziona comunque su Ubuntu.


Il mio stty predefinito in Debian / Arch non ha queste opzioni.
— Hendry

Ovviamente avrei dovuto menzionare che non ero nemmeno sul sistema operativo del PO. Ho modificato il mio post.
— vike
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.