Có một định dạng tiêu chuẩn của Wikipedia cho văn bản trợ giúp dòng lệnh / shell?


239

Nếu không, có một tiêu chuẩn thực tế? Về cơ bản tôi đang viết một dòng lệnh trợ giúp văn bản như vậy:

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

Tôi đã làm điều đó từ cơ bản chỉ là đọc văn bản trợ giúp của các công cụ khác nhau, nhưng có một danh sách các hướng dẫn hay cái gì đó không? Ví dụ: tôi có sử dụng dấu ngoặc vuông hoặc dấu ngoặc đơn không? Làm thế nào để sử dụng khoảng cách? Điều gì xảy ra nếu đối số là một danh sách? Cảm ơn!


8
Tôi nghĩ rằng GNU có một số gợi ý. Tôi sẽ xem xét những gì hầu hết các tiện ích GNU đang làm.
Basile Starynkevitch

1
@DanielPryden Tôi nghĩ rằng câu trả lời trong câu hỏi đó là một chút sai lệch. Nó cung cấp các liên kết giải thích những gì các công tắc nên được chấp nhận và không phải là đầu ra của --helpgiao diện. Nhưng cả hai câu hỏi là một ứng cử viên tốt cho một sự hợp nhất.
pmr

@pmr: Tôi đồng ý - có lẽ một mod có thể hợp nhất các câu hỏi cho chúng tôi.
Daniel Pryden

2
Tôi sẽ xem xét hầu hết các tiện ích GNU đang làm gì và thực hiện theo cách khác.
Yakov Galka

Câu trả lời:


159

Thông thường, đầu ra trợ giúp của bạn nên bao gồm:

  • Mô tả về những gì ứng dụng làm
  • Cú pháp sử dụng, trong đó:
    • Sử dụng [options]để chỉ ra các tùy chọn đi đâu
    • arg_name cho một yêu cầu, số ít arg
    • [arg_name] cho một tùy chọn, số ít arg
    • arg_name... đối với một đối số bắt buộc trong đó có thể có nhiều (điều này là hiếm)
    • [arg_name...] cho một đối số mà bất kỳ số nào có thể được cung cấp
    • lưu ý rằng arg_namephải là một mô tả, tên ngắn, trong trường hợp thấp hơn, con rắn
  • Một danh sách các tùy chọn được định dạng độc đáo, mỗi tùy chọn:
    • có một mô tả ngắn
    • hiển thị giá trị mặc định, nếu có
    • hiển thị các giá trị có thể, nếu điều đó áp dụng
    • Lưu ý rằng nếu một tùy chọn có thể chấp nhận một hình thức ngắn (ví dụ -l) hoặc một hình thức dài (ví dụ --list), hãy kết hợp chúng lại với nhau trên cùng một dòng, vì các mô tả của chúng sẽ giống nhau
  • Chỉ báo ngắn gọn về vị trí của tệp cấu hình hoặc biến môi trường có thể là nguồn của các đối số dòng lệnh, ví dụ: GREP_OPTS
  • Nếu có một trang man, hãy biểu thị như vậy, nếu không, chỉ báo ngắn gọn về nơi có thể tìm thấy trợ giúp chi tiết hơn

Lưu ý thêm rằng đây là hình thức tốt để chấp nhận cả hai -h--helpkích hoạt thông báo này bạn sẽ hiển thị thông báo này nếu người dùng làm hỏng cú pháp dòng lệnh, ví dụ bỏ qua một đối số bắt buộc.


3
Điều gì xảy ra nếu tôi có hai hình thức của một yêu cầu arg? Ví dụ như cách tiêu chuẩn hơn nói: usage: move (+|-)pixelstức là khi một trong + hoặc -bắt buộc ? (Tôi biết tôi có thể có 2 dòng sử dụng nhưng tôi thích ý tưởng nhân đôi chúng với mỗi đối số mới.) Bạn có thể nghĩ về một ví dụ từ một công cụ tiêu chuẩn không?
Alois Mahdal

4
@AloisMahdal Tôi thường thấy {a|b|c|...} trong các phần giúp đỡ cho SysV Init / script dịch vụ mới nổi, đòi hỏi một đối số ít đó là một trong những a, b, c, vv Ví dụ, service sddmkhông có một cuộc tranh cãi trên hệ thống của tôi in ra Usage: /etc/init.d/sddm {start|stop|status|restart|try-restart|force-reload}. Vì vậy, hầu hết mọi người có thể sẽ hiểu usage: move {+|-}pixels}, đặc biệt là nếu một ví dụ được đưa ra:example: move +5
Braden Best

@JorgeBucaran họ không nên thoát với trạng thái 0 phải không? Tôi tin rằng thoát với trạng thái 2 là tiêu chuẩn cho các lệnh shell không hợp lệ.
inavda

89

Hãy nhìn vào docopt . Đây là một tiêu chuẩn chính thức để ghi lại (và tự động phân tích cú pháp) các đối số dòng lệnh.

Ví dụ...

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

Tôi nghĩ rằng không có cú pháp tiêu chuẩn để sử dụng dòng lệnh, nhưng hầu hết sử dụng quy ước này:

Microsoft Cú pháp dòng lệnh , IBM có Cú pháp dòng lệnh tương tự


  • Text without brackets or braces

    Các mục bạn phải nhập như hình

  • <Text inside angle brackets>

    Giữ chỗ mà bạn phải cung cấp một giá trị

  • [Text inside square brackets]

    Các mặt hàng tùy chọn

  • {Text inside braces}

    Đặt các mặt hàng cần thiết; chọn một

  • Thanh dọc {a|b}

    Dấu phân cách cho các mục loại trừ lẫn nhau; chọn một

  • Dấu chấm lửng <file> …

    Các mục có thể được lặp đi lặp lại


15

Chúng tôi đang chạy Linux, một hệ điều hành chủ yếu tuân thủ POSIX. Các tiêu chuẩn POSIX cần có: Cú pháp đối số tiện ích .

  • Một tùy chọn là một dấu gạch nối theo sau bởi một ký tự chữ và số, như thế này : -o.
  • Một tùy chọn có thể yêu cầu một đối số (phải xuất hiện ngay sau tùy chọn); ví dụ, -o argumenthoặc -oargument.
  • Các tùy chọn không yêu cầu đối số có thể được nhóm lại sau dấu gạch nối, vì vậy, ví dụ, -lsttương đương với -t -l -s.
  • Các tùy chọn có thể xuất hiện theo bất kỳ thứ tự nào; do đó -lsttương đương với -tls.
  • Tùy chọn có thể xuất hiện nhiều lần.
  • Tùy chọn đi trước các đối số nonoption khác: -lstnonoption.
  • Đối --số chấm dứt các tùy chọn.
  • Các -tùy chọn thường được sử dụng để đại diện cho một trong những con suối đầu vào tiêu chuẩn.

2
Điều phổ biến là việc sử dụng trong GNU / Linux không tuân theo chính xác tiêu chuẩn này. Chạy ví dụ như man aptitudeđầu ra này (trong số những thứ khác) : aptitude [<options>...] {add-user-tag | remove-user-tag} <tag> <packages>.... Nó chứa {và} để liên kết các lệnh bắt buộc thay thế. Tôi nghĩ (và) có thể được sử dụng giống như chúng được sử dụng trong docopt .
jarno

Câu trả lời này sẽ ít hữu ích hơn nếu liên kết được cung cấp không hoạt động. Có lẽ bạn có thể tóm tắt các phần quan trọng của tài liệu được liên kết trong chính câu trả lời?
domsson

11

Microsoft có thông số kỹ thuật tiêu chuẩn dòng lệnh của riêng họ :

Tài liệu này được tập trung tại các nhà phát triển các tiện ích dòng lệnh. Nói chung, mục tiêu của chúng tôi là trình bày một trải nghiệm người dùng dòng lệnh nhất quán, có thể kết hợp. Đạt được điều đó cho phép người dùng tìm hiểu một tập hợp các khái niệm cốt lõi (cú pháp, đặt tên, hành vi, v.v.) và sau đó có thể chuyển kiến ​​thức đó thành làm việc với một nhóm lệnh lớn. Các lệnh đó có thể xuất các luồng dữ liệu được chuẩn hóa theo định dạng chuẩn để cho phép bố cục dễ dàng mà không phải chịu trách nhiệm phân tích luồng văn bản đầu ra. Tài liệu này được viết để độc lập với bất kỳ triển khai cụ thể nào của trình bao, bộ tiện ích hoặc công nghệ tạo lệnh; tuy nhiên, Phụ lục J - Sử dụng Windows Powershell để triển khai Microsoft Command Line Standard cho thấy cách sử dụng Windows PowerShell sẽ cung cấp miễn phí nhiều hướng dẫn này.


8
Microsoft có trợ giúp dòng lệnh khủng khiếp cho hầu hết các tiện ích, mọi thứ thật tồi tệ đến nỗi họ đã khiến Powershell phải giấu dòng lệnh "thông thường" dưới thảm.
Camilo Martin

25
Tôi không nghĩ câu trả lời nên được đánh giá thấp chỉ vì nó có tham chiếu đến tiêu chuẩn của Microsoft. "Mọi thứ thật tồi tệ" là một ý kiến ​​chủ quan. Theo cách tương tự, có thể nói rằng dòng lệnh của UNIX là khủng khiếp và xấu xí, nhưng chúng ta hãy tránh những ý kiến ​​như vậy và trở thành chuyên gia.
Dima

2
Đồng ý, đó không phải là lý do tại sao câu trả lời này nên bị hạ thấp. Nếu được đánh giá thấp, thì đó phải là vì a) phần tài liệu được trích dẫn không trả lời được câu hỏi và b) tài liệu được liên kết đến dường như không liên quan. Câu hỏi đặt ra là liệu có các tiêu chuẩn cho văn bản trợ giúp hay không, với sự nhấn mạnh vào cú pháp được sử dụng để truyền đạt các bản tóm tắt sử dụng lệnh. Tài liệu này không dâng một cú pháp như vậy mà là làm thế nào để xây dựng các ứng dụng dòng lệnh tốt nói chung trong hệ sinh thái PowerShell (ví dụ như phải hỗ trợ -?, -Help, -Version, vv). Câu trả lời của IMO Steely Wing gần với nhãn hiệu hơn.
Đánh dấu G.

9

Tiêu chuẩn mã hóa GNU là một tài liệu tham khảo tốt cho những thứ như thế này. Phần này đề cập đến đầu ra của --help. Trong trường hợp này nó không cụ thể lắm. Bạn có thể không thể sai khi in một bảng hiển thị các tùy chọn ngắn và dài và một mô tả ngắn gọn. Cố gắng có được khoảng cách giữa tất cả các đối số phù hợp để dễ đọc. Bạn có thể muốn cung cấp một mantrang (và có thể là một infohướng dẫn) cho công cụ của bạn để cung cấp một lời giải thích phức tạp hơn.


0

vâng, bạn đang đi đúng hướng.

có, dấu ngoặc vuông là chỉ báo thông thường cho các mục tùy chọn.

Thông thường, như bạn đã phác thảo, có một bản tóm tắt dòng lệnh ở trên cùng, theo sau là chi tiết, lý tưởng với các mẫu cho mỗi tùy chọn. (Ví dụ của bạn hiển thị các dòng ở giữa mỗi mô tả tùy chọn, nhưng tôi cho rằng đó là vấn đề chỉnh sửa và chương trình thực của bạn đưa ra danh sách tùy chọn thụt lề không có dòng trống ở giữa. Đây sẽ là tiêu chuẩn để tuân theo trong mọi trường hợp.)

Một xu hướng mới hơn, (có thể có một đặc tả POSIX giải quyết vấn đề này?), Là loại bỏ hệ thống trang man cho tài liệu, và bao gồm tất cả thông tin sẽ có trong một trang như một phần của program --helpđầu ra. Phần bổ sung này sẽ bao gồm các mô tả dài hơn, các khái niệm được giải thích, các mẫu sử dụng, các hạn chế và lỗi đã biết, cách báo cáo lỗi và có thể là phần 'xem thêm' cho các lệnh liên quan.

Tôi hi vọng cái này giúp được.


4
Không không không. Lệnh nên có một trang chủ bao gồm một tài liệu tham khảo chi tiết đầy đủ về việc sử dụng và -h|--helpchỉ nên là một tài liệu tham khảo tóm tắt. Bạn cũng có thể bao gồm các tài liệu toàn diện hơn (hướng dẫn, v.v.) trong các trang HTML hoặc thông tin. Nhưng trang web nên có!
ninjalj

Tôi đồng ý với bạn, @ninjalj, nhưng như tôi đã nói, "Một xu hướng mới hơn", và ý tôi là hai hệ thống tôi sử dụng, UWin và MinGW đều đi kèm với tài liệu nhúng. Tôi nghĩ rằng tài liệu nhúng có vị trí của nó, đặc biệt là đối với tập lệnh cấp độ người dùng nhỏ, giống như những gì người dùng này đang đề xuất. Anh ta có nên học nroff và .info không? Nhưng tốt để giữ cho chúng tôi trung thực, cảm ơn ý kiến ​​của bạn và chúc may mắn cho tất cả.
shellter

Cá nhân, khi tôi gõ someCommand --helpvào vỏ của mình, tất cả những gì tôi cần là một lời nhắc nhở nhỏ về thứ tự chính xác mà các đối số đi vào, không phải là một dòng văn bản khổng lồ lấp đầy màn hình, yêu cầu tôi đưa nó vào lessđể xem tất cả. Trang chủ phải là nơi bạn đặt mô tả chi tiết dài, không phải là văn bản trợ giúp.
AJMansfield

0

Tôi sẽ theo dõi các dự án chính thức như tar làm ví dụ. Theo ý kiến ​​của tôi giúp đỡ tin nhắn. cần phải đơn giản và mô tả càng tốt. Ví dụ sử dụng là tốt quá. Không có nhu cầu thực sự cho "trợ giúp tiêu chuẩn".


Về tar... nếu ai đó sẽ tạo ra một tiện ích thần thánh mọi thứ như tar, vui lòng làm cho các công tắc ngắn trở nên đáng nhớ và bao gồm phần "sử dụng ví dụ" trong phần --help. 90% thời gian tôi xem hướng dẫn của tar là để giải nén một cách đơn giản tar.gz.
Camilo Martin

' Không có nhu cầu thực sự về "trợ giúp tiêu chuẩn". 'Có "nhu cầu thực sự" nào cho hầu hết những thứ chúng ta sử dụng không? Hay họ chỉ ở đó để làm cho cuộc sống của chúng ta dễ dàng hơn nhiều? Có một cách đồng ý để thể hiện các tùy chọn không chỉ hữu ích cho người đọc, mà còn có thể là những người hữu ích xây dựng, ví dụ GUI có thể điều khiển các tiện ích dòng lệnh tùy ý và muốn cung cấp các điều khiển để đặt tùy chọn của họ. Có lẽ có những cách sử dụng tốt hơn mà tôi chưa xem xét.
gạch dưới
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.