2013-03-28 9 views
23

In meinem Shell-Skript bekam ich diese Zeilen:Unterdrückungs-Shell-Skript Fehlermeldungen

rm tempfl.txt 
rm tempfl2.txt 

Wenn diese nicht vorhanden ich die Fehlermeldungen erhalten:

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

Gibt es eine Möglichkeit, um nur diese zu unterdrücken Nachrichten, obwohl sie nicht immer angezeigt werden, da die Dateien möglicherweise existieren?

+0

Schauen Sie hier: http://stackoverflow.com/questions/12785533/command-not-found-message-is-redirected-too – ConcurrentHashMap

Antwort

40

Sie haben zwei Möglichkeiten:

Suppress rm Warnungen

$ rm tempfl.txt 2> /dev/null 

Redirect Skript-Ausgabe zu /dev/null

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

Letzteres hat einen Nachteil aller anderen Warnmeldungen fehlt produziert von Ihrem Skript.

+2

rm -f sollte vorsichtig verwendet werden. – hetepeperfan

+0

good point, danke – kamituel

2

sollten Sie alle Fehlermeldung auf/dev/null wie

rm tempfl2.txt 2> /dev/null 
2

umleiten Zusätzlich zu den Antworten oben: Es ist wahrscheinlich eine bessere Idee Fehlermeldungen zu halten (wie die Erlaubnis verweigert oder so). Nur testen Existenz der Datei vor dem Löschen:

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

Dieses eine Bourne-Shell wie geht davon aus, zum Beispiel bash. Das obige hat den zusätzlichen Vorteil, dass es nicht versucht, ein Verzeichnis zu löschen, was rm nicht tun kann.

+0

danke das hat auch funktioniert –

5

Versuchen Sie diesen Befehl ein:

rm -f tempfl.txt 

die Option -f funktioniert wie folgt aus:

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

Der Befehl auch kein Nicht-Null-Fehlercode in Fall meldet die Datei nicht existieren.

+0

Könnten Sie mehr eine Erklärung für Ihre Antwort geben? – GraphicsMuncher

0

Wir 2> /dev/null verwenden, um den Ausgangsfehler zu unterdrücken und || true einen Erfolg Exit-Status zu gewährleisten:

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 

Wenn Sie den Befehl in einer Shell-Skript, Make-Datei verwenden, etc, vielleicht brauchen Sie diese.