Bei vielen Arten von Fehlern wird standardmäßig tar
eine Meldung an stderr ausgegeben und dann die Verarbeitung fortgesetzt. Dabei handelt es sich um Fehler, die als „behebbare“ Fehler bezeichnet werden. Dabei handelt es sich normalerweise um Fehler, die sich auf eine einzelne Datei oder ein einzelnes Archivmitglied beziehen, z. B. Berechtigungsprobleme.
Manchmal ist dieses Verhalten wirklich nervig. Wenn ich beispielsweise ein Archiv entpacke und die Festplatte voll ist, kann es sein, dass ich so etwas bekomme:
tar: python-lib/PyML/classifiers/ext/_cgist.so: Wrote only 2048 of 10240 bytes
tar: python-lib/PyML/classifiers/ext/_csmo.so: Cannot write: No space left on device
tar: python-lib/PyML/classifiers/ext/_csvmodel.so: Cannot write: No space left on device
tar: python-lib/PyML/classifiers/ext/_knn.so: Cannot write: No space left on device
tar: python-lib/PyML/classifiers/ext/_libsvm.so: Cannot write: No space left on device
tar: python-lib/PyML/classifiers/ext/_mylibsvm.so: Cannot write: No space left on device
tar: python-lib/PyML/classifiers/ext/cgist.py: Cannot write: No space left on device
tar: python-lib/PyML/classifiers/ext/csmo.py: Cannot write: No space left on device
das kann in einem großen Archiv Tausende von Zeilen dauern. Wenn dies in einem Skript passiert, würde ich es lieber tar
sofort beenden, damit ich dem Benutzer sofort eine Fehlermeldung geben kann.
Gibt es eine Möglichkeit, tar
das Programm beim ersten angezeigten Fehler zu beenden? Ich kann das in einem Scan von nicht sehen tar --help
. Jedes vernünftige Rezept für ein Wrapper-Skript, das diesen Zweck erfüllt, ist ebenfalls willkommen.
Antwort1
Eine Möglichkeit besteht darin, die Standardfehlerausgabe /dev/full
beispielsweise wie folgt umzuleiten:
tar ... 2>/dev/full
Dies führt dazu, dass Tar fehlschlägt, wenn es versucht, eine Warnmeldung auszugeben stderr
.