Opsiyon bayraklarını tar'a geçmek için neden superflous dash (-) kullanılır?


35

Bir dizin için bir tar dosyasını oluşturmak için tarbirlikte komutu compress, verboseve fileseçenekler böylece yazılabilir:

$ tar -cvf my.tar my_directory/

Ancak bu şekilde yapmak için de çalışır:

 $ tar cvf my.tar my_directory/

Diğer bir deyişle, seçeneklerden önce çizgi (-) koymadan. Neden seçenek listesine bir çizgi (-) eklediniz?


Yanıtlar:


43

UNIX uygulamalarında tarihsel olarak kullanılan seçenekler için birkaç farklı desen vardır. Katran gibi birkaç eski, konumsal bir şema kullanır:

komut seçenekleri argümanları

örneğin tar kullandığı gibi

tar * birşey * f "dosya " üzerinde işlemden geçirilen dosyaların yolları " *"

Bu karışıklığı önlemek için yapılan ilk girişimde, tar ve eski flag-argüman stiline sahip diğer birkaç program bayrakların kısa çizgilerle sınırlandırılmasını sağladı, ancak çoğu yaşlı adam bunu görmezden geldi.

Diğer bazı komutlarda , hepsi yabani terkedilmiş bir armut ağacında bayraklar, eşit işaretler, patnames, argümanlar ve bir keklik kullanan dd (1) gibi daha karmaşık bir komut satırı sözdizimi vardır .

BSD ve daha sonraki unix sürümlerinde, bu, '-' ile işaretlenmiş tek karakterlik bayraklara hemen hemen yakınlaştı, ancak bu, birkaç problem ortaya koymaya başladı:

  • bayraklar hatırlamak zor olabilir
  • bazen aslında '-' ile bir isim kullanmak istediniz.
  • ve özellikle GNU araçlarıyla, olası bayrakların sayısının getirdiği sınırlamalar olmaya başladı. Böylece GNU araçları GNU gibi uzun seçenekler ekledi --output.

Daha sonra Sun, fazladan '-' 'in gereksiz olduğuna karar verdi ve'-'ile uzun stil bayrakları kullanmaya başladı.

Ve işte şimdi olduğu gibi bu hale geldi.


9
"ve armut ağacındaki bir keklik" Kuru teşebbüsümden daha iyi. Sen kazandın.
dmckee

1
güzel tarihsel bağlam.

1
Çok sayıda X programının (Xorg dahil X dahil) tek bir uzun stil bayrak kullandığını fark ettim -. Bu Sun'dan mı?
mattdm

1
'Armut ağacında keklik' ne demek? (Yararlı ve anlaşılması kolay bir bağlantı alabilir miyim?)
plhn

1
@ plhn Deyim. Geleneksel bir İngiliz Noel şarkısı "Noelin On İki Günü", "armut ağacında bir keklik" ile biten bir dizi abartılı hediyeyi listeler. Abartılı bir liste önerir.
Charlie Martin

8

tar -c -f foo -v -B file1 file2 file3Seçenekler ve parametreler arasında veya komut satırının sonundaki dosya adlarını ayırt etmek için tireye ihtiyaç duyduğunuz standart unix biçiminde tar seçenekleri verebilirsiniz . Veya tüm seçenekleri ilk argümanda bir araya getirebilirsiniz, bu durumda çizgi isteğe bağlıdır.

Daha sonra ps, SysV-ish seçeneklerini kullanıyorsanız, çizgileri kullandığınız yer var ve BSD-ish seçeneklerini kullanıyorsanız, sadece işleri daha kafa karıştırıcı kılmak için onları dışarıda bırakın.

Ve hakkında konuşmayalım bile find.


2

Kısa çizgi, bir seçenek parametresi adı ve değerleri arasında ayrım yapmak için kullanılır. Sanırım standart bir kongre daha fazla.


1
best-practiceEtiketi ekleyecektim, çünkü bunun aşağı geleceğini düşündüm.

1
@ Milttrader, en iyi uygulamalardan bahsetmek zor bir soru. Standart sözleşmelere uymak gerçekten en iyi uygulamadır, ancak sizin durumunuzda yapmak isteyip istemediğiniz belli değildir. Senaryonuza bağlı. Eğer kabukta hızlı bir komut kesiyorsanız, muhtemelen umursamazsınız ama bir kütüphane yazıyorsanız, iyi bilinen kuralları takip etmek önemlidir, çünkü bu kütüphanenin nasıl kullanılacağına dair kontrolünüz yoktur. müşteriler tarafından. Bu durumda tüm olası davaları kapsamalısınız ve seçenek adları ile değerler arasında açıklığa kavuşmak önemlidir.

-1

Unix komut satırı seçeneklerini kullanmak için dört adede kadar kural vardır:

  1. -o -p -t (her seçenekten önce tire)
  2. -opt (bir seçenek grubundan önce kısa çizgi)
  3. opt (bir seçenek grubundan önce çizgi olmaz)
  4. --long-option (bir seçenek adından önce çift çizgi)

Örneğin:

$ tar -x -v -z -f package.tar.gz
$ tar -xvzf package.tar.gz
$ tar xvzf package.tar.gz
$ tar --extract -verbose -gzip -file package.tar.gz

1
Bu sözleşme sadece katran için geçerli midir? Peki ya ls? İşe yaramayacak ama çalışacak / çalışacak. Neden öyle?
Shashank Vyas,

Dört sözleşme tüm komutlar için çalışmalıdır.
jonasjacek

2
Hayır yapmazlar. Geçen gün rm rf <dosyaadı> 'nı denedim, bu da işe yaramadı.
Shashank Vyas

-2

Baştaki eksi / tire işaretiyle (-), seçenekleri doğru sırada tutmanız gerekir. Eksi olmadan seçeneğinizin sırasını değiştirebilirsiniz.

Örneğin:

# tar -xvf yourfile.tar
# tar vxf yourfile.tar

Bu cevap yarı doğru, ama AFAIK sadece fsırayla önemli olan bir argüman almak gibi bayraklar . Bkz unix.stackexchange.com/a/239120/3169
Mikel
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.