Come eliminare tutto l’output di un comando con Bash?

Ho uno script bash che esegue un programma con parametri. Che programma alcune uscite di stato (farlo, farlo…). Non c’è nessuna opzione per questo programma per essere tranquilla. Come posso evitare che lo script da visualizzare nulla?

Sto cercando qualcosa di simile a windows “echo off”.

InformationsquelleAutor 6bytes | 2009-03-05

 

7 Replies
  1. 469

    Seguenti invia l’output standard null il dispositivo (bit bucket).

    scriptname >/dev/null

    e se volete anche i messaggi di errore inviati lì, utilizzare uno dei (il primo potrebbe non funzionare in tutte le conchiglie):

    scriptname &>/dev/null
    scriptname >/dev/null 2>&1
    scriptname >/dev/null 2>/dev/null

    e, se si desidera registrare i messaggi ma non li vediamo, sostituire /dev/null con un file effettivo, come:

    scriptname &>scriptname.out

    Per completezza, sotto Windows cmd.exe (dove “nul” è l’equivalente di “/dev/null”), è il seguente :

    scriptname >nul 2>nul
    • Nota bene che, &>’ è peculiare di bash (e, forse, C shell); Korn e Bourne conchiglie richiedono 2> /dev/null o 2>&1 (per inviare stderr nello stesso luogo, come stdout). La Korn shell, sembra interpretare ‘&>’ come “eseguire la roba & sullo sfondo, e poi fare il reindirizzamento i/o su un comando vuoto”.
    • Si noti che alcuni comandi di scrivere direttamente al dispositivo terminale piuttosto che allo standard output/error. Per prova, mettere echo foo > $(tty) in uno script e esecuzione ./test.sh &> /dev/null – L’uscita è ancora stampato sul terminale. Naturalmente questo non è un problema se si sta scrivendo uno script che non utilizza tali comandi.
    • Grande! >nul 2>nul opere per cygwin sotto Windows!
    • c’è un modo per rendere lo script (o di qualsiasi altro programma) tty diverso, in modo che tutto l’output viene reindirizzato a prescindere dal tuo esempio? So che schermo e script può fare qualcosa di simile, ma entrambi sono schizzinoso e variano da *nix per *nix.
    • esiste in Cygwin, non è necessario utilizzare nul.
  2. 41

    Qualcosa di simile

    script > /dev/null 2>&1

    Questo consentirà di evitare di uscita standard e output di errore, reindirizzamento, entrambi /dev/null.

    • Anche realizzato con soli &> se volete risparmiare un po ‘ di battitura 😉
    • Anche se sto aggiungendo questo al mio gs (GhostScript) comando, è ancora la stampa di **** Attenzione: il File è danneggiato %%EOF marcatore, o spazzatura dopo l’ %%EOF. Qualche consiglio?
  3. 11

    Provare

    : $(yourcommand)

    : è l’abbreviazione di “non fare nulla”.

    $() è solo il tuo comando.

    • Molto interessante, ma c’è un limite: il codice di stato restituito è sempre 0 (successo). Vediamo un esempio di utilizzo del comando false che ritorna sempre 1 (fallimento). Per esempio ( echo foo | tee file ; false ) && echo bar visualizza foo. Utilizzando il trucco per sopprimere l’uscita: ( : $(echo foo | tee file ; false) ) && echo bar. Ma visualizza bar significato il codice di stato restituito è 0 (questo non è il codice di stato restituito da false). Si prega di aggiornare la tua risposta fornendo questa limitazione. Cheers
    • che cosa circa DUMMY=$(yourcommand)? Non hanno la limitazione che hai citato. 🙂
    • Perfetto: Il comando DUMMY=$( echo foo | tee file ; false ) && echo bar non visualizza nulla. E il comando DUMMY=$( echo foo | tee file ; true ) && echo bar visualizza bar. Fammi sapere se la tua fornire una risposta a votarlo 😉 Ciao
  4. 7

    Un’alternativa che può andare bene in alcune situazioni è quello 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

    Dal Bash e POSIX riga di comando interpreti non considerare le variabili come un comando, il presente comando codice di ritorno è rispettato.

    Nota: assegnazione con il typeset o declare parola chiave è considerato come un comando, in modo che il valutato codice di ritorno nel caso in cui l’assegnazione e non il comando eseguito nel sub-shell:

    $ declare DUMMY=$( grep r00t /etc/passwd 2>&1 )
    $ echo $?
    0
  5. 5

    Come andynormancx post uso questo: (se si sta lavorando in un ambiente Unix)

    scriptname > /dev/null

    o si può utilizzare questo: (se si lavora in un ambiente Windows)

    scriptname > nul
    • Si può effettivamente fare di meglio nella shell di Windows. Se invece si utilizza “nomescript > nul”, quindi non c’è nemmeno un file da eliminare, come “nul” è l’equivalente di Windows /dev/null.
    • Che è quello che io odio di Windows il file di configurazione di sistema. È “riserve” nomi di file come NUL, COM1, LPT1, CON ecc, non importa ciò che la directory in cui ti trovi (anche se sei in un file di sistema, che può avere quei nomi di file, come nelle condivisioni di rete).
    • Io non credo di aver effettivamente utilizzato NUL dal DOS 5.x, ha avuto un improvviso lampo di un ricordo che quando ho visto questa risposta 😉
  6. 4

    Dare un’occhiata a questo esempio da Il Linux Documentation Project:

    3.6 Esempio: stderr e stdout 2 file

    Questo luogo ogni output di un programma in un file. Questo è adatto, a volte, per le voci cron, se si desidera un comando per passare nel silenzio assoluto.

         rm -f $(find / -name core) &> /dev/null 

    Detto questo, è possibile utilizzare questo semplice reindirizzamento:

    /path/to/command &>/dev/null
  7. 1

    In script è possibile aggiungere le seguenti righe che si sa sono in corso per dare un output:

    some_code 2>>/dev/null

    Oppure si può anche cercare

    some_code >>/dev/null

Lascia un commento