дьоготь cvf або tar -cvf?


24

Я навчився використовувати tar без '-' для варіантів, як, tar cvfz dir.tar.gz Directory/але я нещодавно зіткнувся з дещо іншим tar -czvfсинтаксисом (я думаю, що 'f' має бути останнім варіантом у цьому випадку).

Обидва працюють на Linux та Mac OS. Чи є рекомендований синтаксис, з ou без '-', який є більш портативним у поєднанні з Unix смаками?


1
Дивіться також: unix.stackexchange.com/questions/13573/…
unor

Причина, чому -fповинна бути остання опція, полягає в тому, що вона бере аргумент, і цей аргумент може бути наданий, торкаючись цієї опції. tar -cvfz dir.tar.gz Directoryозначає створити архів з ім'ям, zякий містить файли dir.tar.gzта Directory.
JoL

Відповіді:


27

tarє однією з тих давніх команд часів, коли синтаксис опцій не був стандартизований. Оскільки всі корисні виклики tarвимагають вказати операцію перед тим, як вказати ім’я файлу, більшість tarреалізацій інтерпретують свій перший аргумент як варіант, навіть якщо він не починається з -. Більшість поточних реалізацій приймають a -; єдиний виняток, який мені відомий - це Minix .

Старіші версії POSIX та Single Unix включали в себе tarкоманду без -попереднього специфікатора операції. Single Unix v2 були як традиційні архіватори cpioі tar, але далеко не всі прапори можуть бути стандартизовані , тому що існуючі реалізації були занадто різні, тому стандарти ввели нову команду, pax, яка є єдиним стандартом архиватора в так Single Unix v3 . Якщо ви хочете стандартної відповідності, використовуйте pax, але врахуйте, що багато дистрибутивів Linux не включають його в свою базову установку, а paxв Minix немає . Якщо ви хочете переносимість на практиці, використовуйте tar cf filename.tar.



1
Також зауважте, що якщо дистрибутив Linux містить pax, він зазвичай постачається з найгіршою відомою реалізацією pax (GNU pax), якої слід уникати через багато помилок.
schily

Також psкоманда має таку саму поведінку, ви можете опустити параметри -для параметрів.
переслідування

1
@perror Це неправильно. Багато версій psне дозволяють вам опустити -. У версії Linux є варіанти з і без -, але більшість мають різні значення (сумісність BSD проти System V).
Жил "ТАК - перестань бути злим"

1
Це правда, що більшість часу я використовую лише ps aux… Отже, я можу (частково) помилятися. Вибачте.
переслідування

13

Я можу бути динозавром, але я думаю, що звично використовувати "cvf" замість "-cvf", ймовірно, більш портативно. Я думаю, що більшість дистрибутивів Linux використовують таргет GNU, і я б здогадався, що * BSD також роблять, але ви знайдете власні Unixes, які все ще використовують старий тар SysV, який раніше вимагав від вас не використовувати параметр '-'. .

Я не використовую "-cvf" (або "-xf" чи інше) і не маю проблем навіть із кровоточивим краєм Arch Linux.

І як бічна примітка, я думаю, що ви можете використовувати стандартні параметри команд "jar" з або без "-".


Я погоджуюся з вашою відповіддю, навіть якщо на інформаційній сторінці tar (яка дуже чітка щодо трьох стилів визначення параметрів) йдеться про те, що старі параметри зберігаються лише для сумісності і є купа варіантів, які НЕ мають старого листування.
Девід Коста

1
Ви помиляєтеся: tar на AT&T UNIX було написано, що не має - але він приймає - і пропускає його. Єдиний портативний спосіб зателефонувати на tar - це зателефонувати до нього без - і якщо ви коли-небудь знайдете реалізацію "tar", яка не приймає речі без -, це не tar.
schily

3

У UNIX було небагато програм, які не відповідають поточному стандарту опцій.

Одне з них є dd, але dd було похідне від основної програми IBM DDR(Disk Dump and Restore).

Одне є, arа друге - tar. З моєї інформації, тар хотів бути схожим на ар.

Усі реалізації тарінгу працюють без - і жодна корисна реалізація не потребує -. Тож якщо ви хочете писати портативні сценарії, перевірте стандарт SUSv2 і використовуйте лише командний рядок, сумісний із SUSv2.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.