2013-03-15 14 views
7

Ho un comando rm *.o in Makefile per rimuovere tutti i file oggetto generati durante la compilazione. Tuttavia, alcune informazioni di errore verranno emesse se alcuni file .o non esistono. Quindi, come posso sopprimere l'output delle informazioni di errore?Shell - Soppressione dell'output di un singolo comando

risposta

11

Nel contesto di make, più importante dell'output, non si desidera rendere il risultato di rm come errore. Ci sono due modi per affrontarla:

clean: 
    -rm *.o 2> /dev/null 
    rm -f *.o 2> /dev/null 

Il primo modo è quello di precedere il comando con un segno meno, che racconta make di ignorare il codice di ritorno. Questo è il modo preferito, make -specifico. Il secondo è utilizzare il flag -f, che è specifico solo per rm.

Oltre a questo, è possibile scegliere di sopprimere l'output con 2> /dev/null o no.

2

rm -f *.o

o

rm *.o >& /dev/null

+0

Devi stare attento con '> &' notazione. Funzionerà bene in 'bash', ma non funziona in' dash'. Dato che 'dash' è perfettamente valido dato i tag nella domanda, non è appropriato usare'> & '. –

6

In rari casi, può anche essere necessario reindirizzare l'output /dev/null. Probabilmente vuoi fare rm *.o > /dev/null 2>&1. La parte > /dev/null invia lo stdout a /dev/null e lo 2>&1 dice di inviare stderr ovunque stdout stia andando.

+0

Non credo che 'rm' utilizzi l'output standard. – chepner

+0

Dipende se rm è stato sostituito da rm -v. La maggior parte dei sistemi non lo fa più, probabilmente è un'abitudine che ho imparato da molto tempo fa, quando qualche distro pensava che fosse una buona idea. – Steve

+0

Vedo che la pagina man BSD menziona implementazioni storiche richiedere sullo standard output. – chepner

Problemi correlati