Ich habe gelernt, tar ohne '-' für Optionen zu verwenden, tar cvfz dir.tar.gz Directory/
bin aber kürzlich auf die etwas andere tar -czvf
Syntax gestoßen (ich denke, das 'f' muss in diesem Fall die letzte Option sein).
Beide funktionieren unter Linux und Mac OS. Gibt es eine empfohlene Syntax mit oder ohne '-', die portabler für Unix-Aromen ist?
tar
options
portability
Ascobol
quelle
quelle
-f
die letzte Option sein muss, ist, dass sie ein Argument benötigt und dieses Argument möglicherweise die Option berührt.tar -cvfz dir.tar.gz Directory
bedeutet, ein Archiv mit dem Namen zu erstellenz
, das die Dateiendir.tar.gz
und enthältDirectory
.Antworten:
tar
ist einer dieser alten Befehle aus der Zeit, als die Optionssyntax noch nicht standardisiert war. Da bei allen nützlichen Aufrufen vontar
eine Operation angegeben werden muss, bevor ein Dateiname angegeben wird,tar
interpretieren die meisten Implementierungen das erste Argument als Option, auch wenn es nicht mit einem beginnt-
. Die meisten aktuellen Implementierungen akzeptieren a-
; Die einzige mir bekannte Ausnahme ist Minix .Ältere Versionen von POSIX und Single Unix enthielten einen
tar
Befehl ohne-
vor dem Operationsspezifizierer. Single Unix v2 hatte sowohl traditionelle Archivierungsprogrammecpio
als auchtar
, aber nur sehr wenige Flags konnten standardisiert werden, da die vorhandenen Implementierungen zu unterschiedlich waren. Daher führten die Standards einen neuen Befehl einpax
, der der einzige Standardarchivierungsprogramm seit Single Unix v3 ist . Wenn Sie Standardkonformität wünschen, verwenden Siepax
, aber beachten Sie, dass viele Linux-Distributionen diese nicht in ihre Basisinstallation einbeziehen und espax
in Minix keine gibt . Wenn Sie Portabilität in der Praxis wollen, verwenden Sietar cf filename.tar
.quelle
pax
Regel die schlechteste bekannte pax-Implementierung (GNU pax) enthält, die aufgrund vieler Fehler vermieden werden sollte.ps
Befehl hat auch das gleiche Verhalten, Sie können das-
für die Optionen weglassen .ps
lassen Sie das nicht auslassen-
. Die Linux-Version bietet Optionen mit und ohne-
, die meisten haben jedoch unterschiedliche Bedeutungen (BSD- oder System V-Kompatibilität).ps aux
... benutze , also könnte ich mich (teilweise) irren. Es tut uns leid.Ich mag ein Dinosaurier sein, aber ich denke, dass die gewohnheitsmäßige Verwendung von "cvf" anstelle von "-cvf" wahrscheinlich portabler ist. Ich stelle mir die meisten Linux - Distributionen verwenden GNU tar, und ich würde vermuten , dass die * BSDs auch tun, aber Sie werden proprietäre Unix - Varianten finden , die noch den alten SysV Teer verwendet werden , die verwendet benötigen Sie keine Verwendung ‚-‘ in den Optionen .
Ich verwende nicht "-cvf" (oder "-xf" oder was auch immer) und habe auch mit Arch Linux keine Probleme.
Und nur als Randnotiz, ich denke, Sie können die Sun-Standard "jar" -Befehlsoptionen auch mit oder ohne '-' verwenden.
quelle
Unter UNIX gibt es nur wenige Programme, die nicht dem aktuellen Optionsstandard entsprechen.
Eines ist
dd
, aber dd wurde vom IBM-Mainframe-ProgrammDDR
(Disk Dump and Restore) abgeleitet.Eins ist
ar
und das andere isttar
. Nach meinen Informationen wollte tar ar ähnlich sein.Alle tar-Implementierungen funktionieren ohne das - und für keine nützliche Implementierung ist das - erforderlich. Wenn Sie also portable Skripte schreiben möchten, überprüfen Sie den SUSv2-Standard und verwenden Sie nur eine zu SUSv2 kompatible Befehlszeile.
quelle