Komut satırı / kabuk yardım metni için “standart” bir format var mı?


239

Değilse, fiili bir standart var mı? Temelde böyle bir komut satırı yardım metni yazıyorum:

usage: app_name [options] required_input required_input2
  options:
    -a, --argument     Does something
    -b required     Does something with "required"
    -c, --command required     Something else
    -d [optlistitem1 optlistitem 2 ... ]     Something with list

Bunu temelde sadece çeşitli araçların yardım metnini okuduğumdan yaptım, ama bir rehberler listesi var mı? Örneğin, köşeli parantez veya parantez mi kullanırım? Boşluk nasıl kullanılır? Ya argüman bir liste ise? Teşekkürler!


8
Bence GNU'nun bazı ipuçları var. Çoğu GNU yardımcı programının ne yaptığını inceleyeceğim.
Basile Starynkevitch

1
@DanielPryden Bu sorunun cevabının biraz yanıltıcı olduğunu düşünüyorum. Hangi anahtarların kabul edilmesi --helpgerektiğini ve çıkışının nasıl görünmesi gerektiğini açıklayan bağlantılar verir . Ancak her iki soru da birleşme için iyi bir adaydır.
pm

@pmr: Kabul ediyorum - belki bir mod soruları bizim için birleştirebilir.
Daniel Pryden

2
Çoğu GNU yardımcı programının ne yaptığını inceleyeceğim ve bunu başka şekilde yapacağım.
Yakov Galka

Yanıtlar:


160

Genellikle yardım çıktılarınız şunları içermelidir:

  • Uygulamanın ne yaptığının açıklaması
  • Kullanım söz dizimi:
    • [options]Seçeneklerin nereye gittiğini belirtmek için kullanır
    • arg_name gerekli, tekil bir argüman için
    • [arg_name] isteğe bağlı, tekil bir argüman için
    • arg_name... gerekli olabilecek bir argüman için çok fazla olabilir (bu nadirdir)
    • [arg_name...] herhangi bir sayı verilebilecek bir arg için
    • arg_namebunun açıklayıcı, kısa bir isim, altta yılan şeklinde olması gerektiğini unutmayın
  • Her biri güzel biçimlendirilmiş seçenekler listesi:
    • kısa bir açıklamaya sahip olmak
    • Varsa varsayılan değeri gösteren
    • geçerliyse olası değerleri gösteren
    • Bir seçenek kısa bir formu (ör. -l) Veya uzun bir formu (ör. --list) Kabul edebiliyorsa, açıklamaları aynı olacağından bunları aynı satıra dahil edin.
  • Komut satırı bağımsız değişkenlerinin kaynağı olabilecek yapılandırma dosyalarının veya ortam değişkenlerinin konumunun kısa göstergesi, ör. GREP_OPTS
  • Bir kılavuz sayfası varsa, böyle belirtin, aksi takdirde daha ayrıntılı yardımın nerede bulunabileceğinin kısa bir göstergesi

'S iyi formu hem kabul etmek olduğunu ileri Not -hve --helpbu mesajı tetiklemek için ve bu mesajı göstermelidir ki eğer komut satırı sözdizimi, örneğin atlar gerekli bir argüman kadar kullanıcı messes.


3
Tek bir gerekli argümanın iki formuna sahipsem ne olur? : Söylemenin Ör daha standart yol usage: move (+|-)pixelsyani biri olduğunda + ya da - bir zorunlu ? (2 kullanım hattım olabileceğini biliyorum, ancak her yeni argümanla ikiye katlama fikrini seviyorum.) Standart bir araçtan bir örnek düşünebilir misiniz?
Alois Mahdal

4
@AloisMahdal Genellikle bakınız {a|b|c|...}biridir tekil argüman gerektiren SysV Init / sonradan görme hizmet komut dosyaları için yardım bölümlerinde a, b, cvb Örneğin, service sddmolmadan benim sistemde bir argüman yazdırır Usage: /etc/init.d/sddm {start|stop|status|restart|try-restart|force-reload}. Bu yüzden çoğu insan anlayacaktır usage: move {+|-}pixels}, özellikle de bir örnek verilirse:example: move +5
Braden Best

@JorgeBucaran 0 durumu ile çıkmamalılar mı? Durum 2 ile çıkmak geçersiz kabuk komutları için standart olduğuna inanıyorum.
inavda

91

Dokümana bir göz atın . Komut satırı bağımsız değişkenlerini belgelemek (ve otomatik olarak ayrıştırmak) için resmi bir standarttır.

Örneğin...

Usage:
  my_program command --option <argument>
  my_program [<optional-argument>]
  my_program --another-option=<with-argument>
  my_program (--either-that-option | <or-this-argument>)
  my_program <repeating-argument> <repeating-argument>...

46

Komut satırı kullanımı için standart bir sözdizimi olduğunu düşünüyorum, ancak çoğu bu kural kullanın:

Microsoft Komut Satırı Sözdizimi , IBM benzer Komut Satırı Sözdizimine sahiptir


  • Text without brackets or braces

    Gösterildiği gibi yazmanız gereken öğeler

  • <Text inside angle brackets>

    Değer vermeniz gereken yer tutucu

  • [Text inside square brackets]

    Isteğe bağlı öğeler

  • {Text inside braces}

    Gerekli öğeler kümesi; birini seç

  • Dikey çubuk {a|b}

    Karşılıklı münhasır ürünler için ayırıcı; birini seç

  • eksilti <file> …

    Tekrarlanabilen öğeler


16

Çoğunlukla POSIX uyumlu bir işletim sistemi olan Linux çalıştırıyoruz. POSIX standartları şöyle olmalıdır: Yardımcı Program Bağımsız Değişken Sözdizimi .

  • Bir seçenek bu gibi tek alfanümerik karakter ve ardından bir tire şöyledir: -o.
  • Bir seçenek bir argüman gerektirebilir (seçenekten hemen sonra görünmelidir); örneğin, -o argumentveya -oargument.
  • Bağımsız değişken gerektirmeyen seçenekler tire işaretinden sonra gruplandırılabilir, bu nedenle örneğin, -lsteşdeğerdir -t -l -s.
  • Seçenekler herhangi bir sırada görünebilir; böylece -lsteşittir -tls.
  • Seçenekler birden çok kez görünebilir.
  • Seçenekler diğer seçenek olmayan bağımsız değişkenlerden önce gelir: -lstseçenek olmayan.
  • --Argüman seçenekleri sonlandırır.
  • Bu -seçenek tipik olarak standart giriş akışlarından birini temsil etmek için kullanılır.

2
GNU / Linux'ta kullanımın tam olarak bu standarda uymaması yaygındır. Çalışma mesela man aptitude(diğer şeylerin yanı sıra) bu çıkışı: aptitude [<options>...] {add-user-tag | remove-user-tag} <tag> <packages>.... Alternatif zorunlu komutları bağlamak için {ve} içerir. Bence (ve) docopt'ta kullandıkları gibi kullanılabilirler .
jarno

Verilen bağlantı kesilirse bu cevap çok daha az yardımcı olacaktır. Belki cevabın kendisinde bağlantılı belgenin önemli kısımlarını özetleyebilirsin?
domsson

11

Microsoft'un kendi Komut Satırı Standart belirtimi vardır :

Bu belge, komut satırı yardımcı programlarının geliştiricilerine odaklanmıştır. Toplu olarak, amacımız tutarlı, oluşturulabilir bir komut satırı kullanıcı deneyimi sunmaktır. Kullanıcının çekirdek kavramları (sözdizimi, adlandırma, davranışlar, vb.) Öğrenmesini ve daha sonra bu bilgiyi büyük bir komut kümesiyle çalışmaya dönüştürmesini sağlar. Bu komutlar, çıktı metninin akışlarını ayrıştırma yükü olmadan kolay kompozisyon sağlamak için standartlaştırılmış veri akışlarını standartlaştırılmış bir formatta çıktılayabilmelidir. Bu belge, bir kabuğun, yardımcı program grubunun veya komut oluşturma teknolojilerinin herhangi bir özel uygulamasından bağımsız olarak yazılmıştır; ancak, Ek J - Microsoft Komut Satırı Standardını uygulamak için Windows Powershell kullanma, Windows PowerShell kullanımının bu yönergelerin çoğunun nasıl ücretsiz olarak uygulanacağını gösterir.


9
Microsoft, çoğu yardımcı program için korkunç komut satırı yardımına sahiptir, her şey o kadar korkunçtur ki, Powershell'i halının altındaki "normal" komut satırını gizlemek için yaptılar.
Camilo Martin

25
Sadece Microsoft'un standardına bir referansı olduğu için cevabın indirilmesi gerektiğini düşünmüyorum. "her şey çok berbattır" öznel bir görüştür. Aynı şekilde, UNIX'in komut satırının korkunç ve çirkin olduğu söylenebilir, ancak bu fikirleri uzak tutalım ve profesyonel olalım.
Dima

2
Anlaşıldı, bu yüzden bu cevabın reddedilmesi gerekmiyor. Aşağıya oy verildiyse, bunun nedeni a) belgenin alıntılanan bölümünün eldeki soruya cevap vermemesi ve b) bağlantılı belgenin alakalı görünmemesi olmalıdır. Soru, komut kullanım sinapslarını iletmek için kullanılan sözdizimine büyük önem veren “yardım metni” için standartlar olup olmadığını soruyor. Belge böyle bir sözdizimi ziyade nasıl (örn desteklemelidir PowerShell ekosistemde genel olarak iyi komut satırı uygulamaları oluşturmak üzere buyruğu vermez -?, -Help, -Versionvb.) IMO Steely Wing'in cevabı işarete daha yakın.
Mark

9

GNU Kodlama Standardı bu gibi şeyler için iyi bir referanstır. Bu bölüm , çıktılarıyla ilgilidir --help. Bu durumda çok spesifik değildir. Kısa ve uzun seçenekleri ve kısa bir açıklamayı gösteren bir tablo yazdırırken büyük olasılıkla yanlış gidemezsiniz. Okunabilirlik için tüm argümanlar arasındaki boşluğu almaya çalışın. Muhtemelen daha ayrıntılı bir açıklama sağlamak için aracınız için bir mansayfa (ve muhtemelen bir infokılavuz) sağlamak istersiniz .


0

evet, doğru yoldasın.

evet, köşeli parantez isteğe bağlı öğeler için her zamanki göstergedir.

Tipik olarak, çizdiğiniz gibi, üstte bir komut satırı özeti, ardından ayrıntılar, her seçenek için örneklerle birlikte bulunur. (Örneğin, her seçenek açıklaması arasındaki satırları gösterir, ancak bunun bir düzenleme sorunu olduğunu ve gerçek programınızın aralarında boş satırlar olmadan girintili seçenek listeleri çıkardığını varsayıyorum. Bu, her durumda takip edilecek standart olacaktır.)

Daha yeni bir eğilim, (belki de buna değinen bir POSIX belirtimi var mı?), Man sayfa sisteminin dokümantasyon için ortadan kaldırılması ve program --helpçıktının bir parçası olarak bir sayfada olacak tüm bilgileri içermesidir . Bu ekstra, daha uzun açıklamalar, açıklanan kavramlar, kullanım örnekleri, bilinen sınırlamalar ve hatalar, bir hatanın nasıl rapor edileceği ve muhtemelen ilgili komutlar için 'ayrıca bakınız' bölümünü içerecektir.

Umarım bu yardımcı olur.


4
Hayır hayır hayır. Komut, tam ayrıntılı bir referans referansı içeren bir kılavuz sayfasına sahip -h|--helpolmalı ve sadece özetlenmiş bir referans olmalıdır. HTML veya bilgi sayfalarına daha kapsamlı belgeler de (öğreticiler vb.) Dahil edebilirsiniz. Ama manpage orada olmalı!
ninjalj

Sana katılıyorum, @ninjalj, ama dediğim gibi, "Daha yeni bir trend" ve bununla birlikte kullandığım iki sistem, UWin ve MinGW her ikisi de gömülü belgelere sahip. Gömülü doktorun, özellikle bu kullanıcının önerdiği gibi, küçük kullanıcı düzeyi komut dosyaları için yerleri olduğunu düşünüyorum. Nroff ve .info öğrenmek zorunda mı? Ama bizi dürüst tutmak iyi, yorumlarınız için teşekkürler ve herkese iyi şanslar.
shellter

Şahsen, kabuğuma yazdığımda someCommand --help, ihtiyacım olan tek şey, argümanların girdiği kesin siparişin küçük bir hatırlatıcısı, ekranı dolduran dev bir metin yığını değil, lesssadece hepsini görmek için onu bağlamamı gerektiriyor . Kılavuz, yardım metnini değil, uzun ayrıntılı açıklamayı koyduğunuz yerde olmalıdır.
AJMansfield

konferansındaki docopt yapımcısına göre POSIX'in bunun için bir normundan bahsetti.
v.oddou

0

Örnek olarak katran gibi resmi projeleri takip ederdim. Bence msg. olabildiğince basit ve açıklayıcı olmalıdır. Kullanım örnekleri de iyidir. "Standart yardıma" gerek yoktur.


İlgili tar... Birisi katran gibi yapar-herşey tanrı-yarar yapacak ise, kısa unutulmaz anahtarları yapmak ve bir "örnek kullanım" bölümüne ekleyin --help. Katranın talimatlarına baktığımda% 90'ı basit çıkarmak için tar.gz.
Camilo Martin

' 'Standart yardım' için gerçek bir ihtiyaç yoktur. 'Kullandığımız şeylerin çoğu için “gerçek ihtiyaç” var mı? Yoksa sadece hayatımızı kolaylaştırmak için oradalar mı? Seçenekleri temsil etmek için üzerinde anlaşmaya varılmış bir yola sahip olmak sadece okuyucular için değil, aynı zamanda örneğin, keyfi komut satırı yardımcı programlarını kontrol edebilen ve seçeneklerini ayarlamak için kontroller sağlamak isteyen GUI'ler inşa eden yararlı insanlar olabilir. Muhtemelen henüz düşünmediğim daha iyi kullanımlar var.
underscore_d
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.