358 votes

Existe-t-il un format "standard" pour le texte d'aide de la ligne de commande/du shell ?

Si ce n'est pas le cas, existe-t-il une norme de facto ? En gros, j'écris un texte d'aide en ligne de commande comme ceci :

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

J'ai fait cela en lisant simplement le texte d'aide de divers outils, mais existe-t-il une liste de directives ou quelque chose du genre ? Par exemple, dois-je utiliser des crochets ou des parenthèses ? Comment utiliser l'espacement ? Que faire si l'argument est une liste ? Merci !

8 votes

Je pense que GNU a quelques indices. Je regarderais ce que font la plupart des utilitaires GNU.

1 votes

@DanielPryden Je pense que la réponse à cette question est un peu trompeuse. Elle donne des liens qui expliquent quels commutateurs devraient être acceptés et non pas comment la sortie de --help devrait regarder. Mais les deux questions sont de bons candidats pour une fusion.

0 votes

@pmr : Je suis d'accord - peut-être qu'un mod peut fusionner les questions pour nous.

231voto

davetron5000 Points 9622

Typiquement, votre sortie d'aide devrait inclure :

  • Description de ce que fait l'application
  • Syntaxe d'utilisation, qui :
    • Utilisations [options] pour indiquer où vont les options
    • arg_name pour un arg nécessaire et singulier
    • [arg_name] pour un arg facultatif et singulier
    • arg_name... pour un arg requis qui peut être très nombreux (ce qui est rare)
    • [arg_name...] pour un arg pour lequel un nombre quelconque peut être fourni
    • notez que arg_name doit être un nom court et descriptif, en minuscules et en majuscules.
  • Une liste d'options joliment formatée, chacune :
    • avoir une courte description
    • afficher la valeur par défaut, s'il y en a une
    • montrant les valeurs possibles, si cela s'applique
    • Notez que si une option peut accepter une forme courte (par ex. -l ) ou une forme longue (par ex. --list ), incluez-les ensemble sur la même ligne, car leurs descriptions seront les mêmes.
  • Brève indication de l'emplacement des fichiers de configuration ou des variables d'environnement qui pourraient être la source d'arguments de ligne de commande, par ex. GREP_OPTS
  • S'il existe une page de manuel, indiquez-la comme telle ; sinon, indiquez brièvement où vous pouvez trouver une aide plus détaillée.

Notez en outre qu'il est de bon ton d'accepter à la fois -h y --help pour déclencher ce message et que vous devez afficher ce message si l'utilisateur se trompe dans la syntaxe de la ligne de commande, par exemple s'il omet un argument obligatoire.

5 votes

Que faire si j'ai deux formulaires d'un même arg requis ? Par exemple, une façon plus standard de dire : usage: move (+|-)pixels c'est-à-dire lorsque l'une des + ou - est obligatoire ? (Je sais que je peux avoir 2 lignes d'utilisation mais j'aime l'idée de les doubler à chaque nouvel argument). Pouvez-vous penser à un exemple tiré d'un outil standard ?

6 votes

@AloisMahdal Je vois habituellement {a|b|c|...} dans les sections d'aide du service SysV Init/upstart scripts, qui nécessitent un argument unique qui est l'un des suivants a , b , c etc. Par exemple, service sddm sans argument sur mon système imprime Usage: /etc/init.d/sddm {start|stop|status|restart|try-restart|force-reload} . Donc la plupart des gens comprendraient probablement usage: move {+|-}pixels} surtout si un exemple est donné : example: move +5

0 votes

@JorgeBucaran ils ne devraient pas sortir avec le statut 0, n'est-ce pas ? Je crois que la sortie avec le statut 2 est la norme pour les commandes shell invalides.

141voto

Pun Points 46

Jetez un coup d'œil à docopt . Il s'agit d'un standard formel pour documenter (et analyser automatiquement) les arguments de la ligne de commande.

Par exemple...

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>...

11voto

pmr Points 30450

Le GNU Coding Standard est une bonne référence pour ce genre de choses. Cette section traite de la sortie de --help . Dans ce cas, il n'est pas très spécifique. Vous ne pouvez probablement pas vous tromper en imprimant un tableau indiquant les options courtes et longues et une description succincte. Essayez d'obtenir un espacement correct entre tous les arguments pour une meilleure lisibilité. Vous voudrez probablement fournir un man (et éventuellement une page info manuel) de votre outil pour fournir une explication plus élaborée.

1voto

shellter Points 15304

Oui, vous êtes sur la bonne voie.

oui, les crochets sont l'indicateur habituel des éléments facultatifs.

En général, comme vous l'avez esquissé, il y a un résumé de la ligne de commande en haut, suivi de détails, idéalement avec des exemples pour chaque option. (Votre exemple montre des lignes entre chaque description d'option, mais je suppose qu'il s'agit d'un problème d'édition, et que votre programme réel produit des listes d'options indentées sans lignes vides entre elles. Ce serait la norme à suivre dans tous les cas).

Une tendance plus récente (il existe peut-être une spécification POSIX qui traite de ce sujet) est l'élimination du système de pages de manuel pour la documentation, et l'inclusion de toutes les informations qui seraient dans une page de manuel comme faisant partie de la page de manuel de l'utilisateur. program --help sortie. Ce supplément comprendra des descriptions plus longues, des concepts expliqués, des exemples d'utilisation, des limitations et des bogues connus, la façon de signaler un bogue, et éventuellement une section "voir aussi" pour les commandes connexes.

J'espère que cela vous aidera.

7 votes

Non non non. La commande devrait avoir une page de manuel qui comprend une référence complète et détaillée de l'utilisation, et -h|--help ne devrait être qu'une référence résumée. Vous pouvez également inclure une documentation plus complète (tutoriels, etc...) dans des pages HTML ou d'information. Mais la page de manuel doit être là !

0 votes

Je suis d'accord avec vous, @ninjalj, mais comme je l'ai dit, "une tendance plus récente", et par cela je veux dire que les deux systèmes que j'utilise, UWin et MinGW ont tous deux opté pour la documentation intégrée. Je pense que la documentation intégrée a sa place, surtout pour les petits script de niveau utilisateur, comme ce que cet utilisateur propose. Devrait-il apprendre nroff et .info ? Mais c'est bien de nous garder honnêtes, merci pour vos commentaires et bonne chance à tous.

1 votes

Personnellement, quand je tape someCommand --help dans mon shell, tout ce dont j'ai besoin, c'est d'un petit rappel de l'ordre précis des arguments, et non pas d'une énorme bande de texte qui remplit l'écran, ce qui nécessite que je le pipe dans less juste pour voir tout ça. La page de manuel devrait être l'endroit où vous mettez la longue description détaillée, pas le texte d'aide.

0voto

Pan.student Points 356

Je suivrais l'exemple de projets officiels comme tar. À mon avis, les messages d'aide doivent être aussi simples et descriptifs que possible. Des exemples d'utilisation sont également utiles. Il n'y a pas vraiment besoin d'une "aide standard".

1 votes

Concernant tar ... si quelqu'un doit créer un utilitaire divin qui fait tout comme tar, merci de rendre les commutateurs courts mémorisables, et d'inclure une section "exemple d'utilisation" dans le manuel de l'utilisateur. --help . 90% des fois où je regarde les instructions de tar c'est pour extraire un simple tar.gz .

1 votes

' Il n'y a pas vraiment besoin d'une "aide standard". Y a-t-il un "besoin réel" pour la plupart des choses que nous utilisons ? Ou sont-ils simplement là pour nous faciliter la vie ? Avoir une façon convenue de représenter les options est utile non seulement pour les lecteurs, mais aussi par exemple pour les personnes construisant par exemple des interfaces graphiques qui peuvent contrôler des utilitaires de ligne de commande arbitraires et qui veulent fournir des contrôles pour définir leurs options. Il y a probablement de meilleures utilisations que je n'ai pas encore envisagées.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X