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.