Nauczyłem się używać tar bez „-” dla opcji, tar cvfz dir.tar.gz Directory/
ale ostatnio natrafiłem na nieco inną tar -czvf
składnię (myślę, że „f” musi być ostatnią opcją w tym przypadku).
Oba działają na systemie Linux i Mac OS. Czy istnieje zalecana składnia z ou bez „-”, która jest bardziej przenośna w różnych wersjach uniksowych?
tar
options
portability
askobol
źródło
źródło
-f
musi być ostatnią opcją jest to, że wymaga ona argumentu i argument ten można podać dotykając opcji.tar -cvfz dir.tar.gz Directory
oznacza utworzenie archiwum o nazwiez
zawierającej plikidir.tar.gz
iDirectory
.Odpowiedzi:
tar
jest jednym z tych starożytnych poleceń z czasów, gdy składnia opcji nie była znormalizowana. Ponieważ wszystkie użyteczne wywołaniatar
wymagają podania operacji przed podaniem nazwy pliku, większośćtar
implementacji interpretuje swój pierwszy argument jako opcję, nawet jeśli nie zaczyna się on od-
. Większość obecnych implementacji akceptuje-
; Jedyny wyjątek, o którym wiem, to Minix .Starsze wersje POSIX i Single Unix zawierały
tar
polecenie bez-
przed specyfikatorem operacji. Single Unix v2 miał zarówno tradycyjne archiwizującecpio
itar
, ale bardzo niewielu flagi mogą być standaryzowane, ponieważ istniejące implementacje były zbyt różne, więc standardy wprowadzono nowe polecenie,pax
, który jest jedynym standardem w archiwum od Single Unix v3 . Jeśli chcesz standardowej zgodności, używajpax
, ale uwaga, że wiele dystrybucji Linuksa nie uwzględnia jej w podstawowej instalacji i nie ma jejpax
w Minix . Jeśli chcesz mieć przenośność w praktyce, użyjtar cf filename.tar
.źródło
pax
, zwykle zawiera najgorszą znaną implementację pax (GNU pax), której należy unikać z powodu wielu błędów.ps
komenda ma taki sam problem, można pominąć-
dla opcji.ps
nie pozwala pominąć-
. Wersja Linuksa ma opcje zi bez-
, ale większość ma inne znaczenie (zgodność BSD vs. System V).ps aux
... Więc mogę się (częściowo) mylić. Przepraszam.Mogę być dinozaurem, ale myślę, że zwykłe używanie „cvf” zamiast „-cvf” jest prawdopodobnie bardziej przenośne. Wyobrażam sobie, że większość dystrybucji Linuksa używa tar GNU, i zgaduję, że * BSD również, ale znajdziesz zastrzeżone Uniksy, które nadal używają starej tar SysV, która wymagała od ciebie, abyś nie używał „-” w opcjach .
Nie używam „-cvf” (lub „-xf” lub cokolwiek innego) i nie mam żadnych problemów nawet z krwawiącym linuksem Arch.
I tak na marginesie, myślę, że możesz użyć standardowych poleceń Sun „jar” z lub bez znaku „-”.
źródło
W systemie UNIX było niewiele programów, które nie są zgodne z bieżącym standardem opcji.
Jednym jest
dd
, ale dd pochodzi z programu mainframe IBMDDR
(zrzut i przywracanie dysku).Jeden jest,
ar
a drugi jesttar
. Z moich informacji wynika, że tar chciał być podobny do ar.Wszystkie implementacje tar działają bez - i żadna użyteczna implementacja nie wymaga -. Jeśli więc chcesz pisać przenośne skrypty, sprawdź standard SUSv2 i użyj tylko wiersza poleceń zgodnego z SUSv2.
źródło