Frage

tar -xvzf $ filename.tar.gz || {Exit $ ?; }

Hier meine Skripte mit Errorcode beenden würde 141. ich Fedora Core 6 mit tar-Version 1.15

bin mit

es wird nicht die ganze Zeit passieren, aber mehr als 70 Prozent der Zeit, es funktioniert nicht.

War es hilfreich?

Lösung 3

Als Abhilfe können wir jetzt cpio für die Archivierung verwendet wird, die für uns jetzt gut funktioniert, obwohl ich möchte wissen, warum Teer dieses Problem verursacht, seine um für lange Zeit, und seit Jahren als Standardwerkzeug verwendet wird.

Andere Tipps

Ich weiß, das Gewinde mehr als ein paar Jahre alt ist, aber ich bin für jene Leute zu kommentieren, die mit dem Fehler auf diesen Thread stolpern.

Wenn Sie eine Komprimierungsoption verwenden, Teer öffnet implizit eine Verbindung mit dem zugrunde liegenden Programm ein Rohr. Also, in dem Beispiel des OP: tar -xvzf $filename.tar.gz: gunzip $filename.tar.gz | tar -xv -, was Teer tatsächlich tut, ist etwas ähnlich wie diese ausgeführt werden. Sie können dies überprüfen, indem Sie einen top ausgeführt wird, wo man zwei Prozesse sehen (eine für Teer und eine für gzip).

Manchmal aber, die Pipeline selbst bricht. Zum Beispiel, wenn die Datei nicht eine gzip-Datei. Nehmen Sie dies zum Beispiel: tar -xvzf somefile.iso, die gunzip somefile.iso | tar -xv - entspräche. In einer solchen Situation wird Fehler, gzip aus. Wenn Fehler aus gzip, bricht die Pipeline. Eine andere Möglichkeit wäre es, wenn die gzip-Datei korrekt war, aber die TAR-Datei in der es war korrupt. In diesem Fall beginnt gzip den unkomprimierten Strom zu Teer senden, aber dann Teer realisiert etwas nicht stimmt und schließt den Stream. gzip hier würde dann Fehler aus, weil es Ausgang geschlossen ist.

Austrittswerte zeigt ein Wert über 128 Beendigung aufgrund eines Signals, und die Menge über 128 bedeutet, das Signal, das die Beendigung verursacht. Also, wenn wir 128 aus dem Exit-Code 141 des OP subtrahieren, erhalten wir 13, das entspricht SIGPIPE (man 7 signal für eine Liste von Standardsignalen und deren entsprechende ganzzahlige Werte).

Der Mann Seite listet SIGPIPE Kommentar als „Broken Rohr: schreiben Rohr ohne Leser“. Also dann, so scheint es, dass gzip versucht, das Rohr zu schreiben, aber Teer hat Zuhören gestoppt. Meine Vermutung ist hier, dass gzip ist dekomprimieren die Datei erfolgreich, aber der unkomprimierte Strom ist kein gültiges tar-Archiv. Mein Rat wäre hier auf der Datei auszuführen gunzip, dann Teer auf der Ergebnis-Datei ausführen und sehen, welche nicht (basierend auf dem SIGPIPE, meine Vermutung ist, dass der tar fehl). In jedem Fall sieht es aus wie die Datei, die von diesen Versionen der Werkzeuge (entweder Korruption oder ein Versionskonflikt irgendeiner Art) nicht lesbar ist.

Wie wurden diese Dateien gemacht (was für Optionen auf Teer, usw.)? Erstellt sie auf dieser Maschine oder eine andere Maschine? Wenn Sie eine tar.gz-Datei auf diesem Computer erstellen, kann diese gleiche Maschine die Dateien ohne den Fehler extrahieren?

GNU tar nur gibt ein paar Dinge, keiner von ihnen -141 zu sein. aber wenn es einen Subprozess, wie gzip ausgeführt wird, und dieser Prozess nicht normal beendet, es gibt , die Return-Code.

Ich bin mir nicht sicher, was die subprocess könnte allerdings gewesen. versuchen Sie es mit --verbose und sehen Sie, wenn Sie irgendwelche Hinweise bekommen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top