2013-03-28 25 views
23

Nel mio script di shell ho ottenuto queste righe:sopprimere script di shell messaggi di errore

rm tempfl.txt 
rm tempfl2.txt 

Se questi non esistono ricevo i messaggi di errore:

rm: tempfl2.txt: No such file or directory 
rm: tempfl.txt: No such file or directory 

c'è un modo per sopprimere solo questi messaggi anche se non appaiono sempre, come potrebbero esistere i file?

+0

Dai un'occhiata qui: http://stackoverflow.com/questions/12785533/command-not-found-message-is-redirected-too – ConcurrentHashMap

risposta

40

si hanno due opzioni:

reprimere rm avvertenze

$ rm tempfl.txt 2> /dev/null 

script di reindirizzamento di output per /dev/null

$ ./myscript.sh 2> /dev/null 

Quest'ultimo ha uno svantaggio di perdere tutti gli altri messaggi di avviso prodotto dal tuo script.

+2

rm -f deve essere usato con attenzione. – hetepeperfan

+0

buon punto, grazie – kamituel

2

si dovrebbe reindirizzare tutto il messaggio di errore a/dev/null come

rm tempfl2.txt 2> /dev/null 
2

Aggiungendo alle risposte di cui sopra: E 'probabilmente una migliore idea per mantenere i messaggi di errore (come permesso negato o qualcosa del genere). Basta verificare l'esistenza del file prima di eliminarlo:

[ -f file.txt ] && rm file.txt 

Questo assume una Bourne shell, come, ad esempio, bash. Quanto sopra ha l'ulteriore vantaggio che non tenterà di cancellare una directory, qualcosa che non può fare rm.

+0

grazie anche questo ha funzionato –

5

Provate questo comando:

rm -f tempfl.txt 

l'opzione -f atti come questo:

-f, --force ignore nonexistent files, never prompt 

Il comando, inoltre, non riportano un codice di errore diverso da zero nel caso in cui il file non esistere.

+0

Potresti dare più di una spiegazione per la tua risposta? – GraphicsMuncher

0

Possiamo usare 2> /dev/null per sopprimere l'errore di uscita e || true per garantire uno stato di successo di uscita:

rm foo 
=> rm: cannot remove ‘foo’: No such file or directory 

rm foo 2> /dev/null 
echo $? 
=> 1 

rm foo 2> /dev/null || true 
echo $? 
=> 0 

Se si utilizza il comando in uno script di shell, makefile, ecc, forse avete bisogno di questo.