Come sopprimere tutto l'output di un comando usando Bash?
Domanda
Ho uno script bash che esegue un programma con parametri. Quel programma genera un certo stato (facendo questo, facendo quello ...). Non è possibile che questo programma sia silenzioso. Come posso impedire che lo script visualizzi qualcosa?
Sto cercando qualcosa come Windows " echo off " ;.
Soluzione
Quanto segue invia l'output standard al dispositivo null (bit bucket).
scriptname >/dev/null
e se vuoi che vengano inviati anche messaggi di errore, usa uno dei (il primo potrebbe non funzionare in tutte le shell):
scriptname &>/dev/null
scriptname >/dev/null 2>&1
scriptname >/dev/null 2>/dev/null
e, se si desidera registrare i messaggi ma non vederli, sostituire / dev / null
con un file effettivo, come:
scriptname &>scriptname.out
Per completezza, in Windows cmd.exe (dove "nul" è l'equivalente di "quot / / dev / null"), è:
scriptname >nul 2>nul
Altri suggerimenti
Qualcosa di simile
script > /dev/null 2>&1
Ciò impedirà l'output standard e output degli errori, reindirizzandoli entrambi su / dev / null
.
Prova
: $(yourcommand)
:
è l'abbreviazione di " non fare nulla " ;.
$ ()
è solo il tuo comando.
Un'alternativa che può adattarsi in alcune situazioni è quella di assegnare il risultato di un comando a una variabile:
$ DUMMY=$( grep root /etc/passwd 2>&1 )
$ echo $?
0
$ DUMMY=$( grep r00t /etc/passwd 2>&1 )
$ echo $?
1
Poiché Bash e altri interpreti della riga di comando POSIX non considerano le assegnazioni di variabili come un comando, il codice di ritorno del comando corrente viene rispettato.
Nota: l'assegnazione con la parola chiave typeset
o declare
viene considerata come un comando, quindi il codice di ritorno valutato nel caso sia l'assegnazione stessa e non il comando eseguito nella sotto-shell:
$ declare DUMMY=$( grep r00t /etc/passwd 2>&1 )
$ echo $?
0
Come andynormancx post usa questo: (se lavori in un ambiente Unix)
scriptname > /dev/null
oppure puoi usare questo: (se lavori in un ambiente Windows)
scriptname > nul
Dai un'occhiata a questo esempio da La documentazione di Linux Progetto :
3.6 Esempio: file stderr e stdout 2
Questo posizionerà ogni output di un programma in un file. Questo è adatto a volte per le voci cron, se si desidera che un comando passi in assoluto silenzio.
rm -f $(find / -name core) &> /dev/null
Detto questo, puoi usare questo semplice reindirizzamento:
/path/to/command &>/dev/null
Nel tuo script puoi aggiungere quanto segue alle righe che sai che daranno un output:
some_code 2>>/dev/null
Oppure puoi anche provare
some_code >>/dev/null