Tar output with hidden errors

Tar Option 'v' Considered Harmful

Das Utility tar sollte eigentlich in vtar umbenannt werden, weil scheinbar jeder die Option v reflexartig zufügt. Aber ist das in irgendeiner Art hilfreich? Oder kann es vielleicht sogar Probleme verursachen?

Die Option v gehört scheinbar zu tar wie der Lausbefall zum Kindergartenbesuch. Lässt man sie weg, treibt das manchem Beobachter beim Auspacken eines Tarballs den Angstschweiß auf die Stirn, und sollte später bei der neu installierten Software irgendetwas nicht ganz so laufen, wie es soll, wird früher oder später der fürsorgliche Rat geäußert, man solle das Archiv doch besser noch einmal mit tar xv auspacken.

Fast jedes Kommandozeilentool hat eine Option -v oder --verbose mit der man im Ausgabepuffer des Terminalfensters unerwünschte Ausgaben mit irrelevanten Daten überschreiben kann. Ich kenne allerdings kein anderes Tool, bei dem diese Option so beliebt ist.

Fragt man, weshalb das Archiv xyz.tar.gz denn unbedingt mit Option v ausgepackt werden müsse, hört man oft, dass man ja schließlich wissen will, was im Archiv enthalten ist. Ich will das auch immer wissen, und deshalb lasse ich mir den Inhalt fast jeden Archives vor dem Auspacken mit der Option t wie Terminal anzeigen.

Das nächste Argument ist dann meist: Man will den Fortschritt der Aktion verfolgen!

Auch das kann ich ab und zu nachvollziehen, jedenfalls, wenn es mir richtig langweilig ist. Aber dann interessieren mich die ETA (Estimated Time of Arrival) und je nach Grad der Langeweile vielleicht auch noch der prozentuale Fortschritt. Irgendwelche Dateinamen vorbeihuschen zu sehen, hilft mir dabei nicht wirklich. Und außerdem sehe ich doch den Fortschritt. Der kleinste gemeinsame Nenner aller Shells ist: Sehe ich keinen Prompt, passiert gerade etwas. Und beunruhigt mich, dass der Prompt nicht zurückkehrt, habe ich Job-Control mit CTRL-C, CTRL-Z, etc.

Aller Argumente beraubt, wird jetzt mit einem Schulterzucken angemerkt, dass es letzendlich Geschmackssache sei. Schließlich schadet es ja niemandem, wenn tar mit Option v geschwätzig gemacht wird.

Es schadet sehr wohl! Das Einzige, was uns beim Arbeiten mit einem Tarball interessiert, sind eventuelle Fehler, und genau diese werden von der Option v unkenntlich gemacht:

$ tar xzvf gimp-2.8.16.tar.gz
...
gimp-2.8.16/themes/Default/images/stock-path-22.png
gimp-2.8.16/themes/Default/images/stock-channel-indexed-16.png
gimp-2.8.16/themes/Default/images/stock-channel-blue-32.png
gimp-2.8.16/themes/Default/images/stock-quick-mask-on-12.png
gimp-2.8.16/themes/Default/images/stock-gradient-bilinear-16.png
gimp-2.8.16/themes/Default/images/stock-display-filter-gamma-16.png
gimp-2.8.16/themes/Default/images/stock-texture-64.png
gimp-2.8.16/themes/Default/images/stock-rotate-90-16.png
gimp-2.8.16/themes/Default/images/stock-channel-gray-24.png
gimp-2.8.16/themes/Default/images/stock-display-filter-16.png
gimp-2.8.16/themes/Default/images/stock-gradient-spiral-clockwise-16.png
gimp-2.8.16/themes/Default/images/stock-channel-alpha-32.png
gimp-2.8.16/themes/Default/images/stock-channel-red-48.png
tar: Exiting with failure status due to previous errors

Klar, wir sind gerade sensibilisiert, und sehen die Fehlermeldung in der letzten Zeile, aber in der Realität passiert das nicht, besonders dann, wenn das Auspacken des Archivs lange dauert, die Option v also scheinbar nützlich wäre.

Und last but not least, diese Zusammenfassung in der letzten Zeile ist ein Bonbon von GNU-Tar. Andere Tar-Varianten geben Fehler irgendwo zwischen der Verbose-Ausgabe aus, eventuell längst vorbeigehuscht, vielleich sogar aus dem Zeilenpuffer herausgescrollt. Einen Extrahierfehler kann man also nur mit echo $? erkennen. Aber wer macht das schon?

Das ist keine Angstmacherei. Das Tar-Kommando von Solaris hatte früher eine lächerlich niedrige Beschränkung für die Länge von Dateinamen. Deshalb konnte ein Installations-Tarball unserer Software nur mit GNU Tar ausgepackt werden. Mit Option v allerdings ging der Fehler im Listing Tausender Dateien unter, und das Tar von Solaris hielt es auch nicht für notwendig, auf den Fehler am Ende der Ausgabe noch einmal hinzuweisen.

Also: Die Option v bei tar ist völlig nutzlos. Einfach nicht verwenden!


blog comments powered by Disqus