web-dev-qa-db-fra.com

Existe-t-il des normes pour les commutateurs et arguments de ligne de commande Linux?

Il s'agit plus de l'invocation d'un programme que de n'importe quel langage ou analyseur (même si je suis sûr que le choix de la bibliothèque d'analyseur peut en dépendre). Vous voyez, j'ai utilisé beaucoup d'utilitaires de ligne de commande Linux. Et il y a des modèles évidents; '-' précède une seule lettre pour les options courtes, plusieurs options qui ne prennent pas d'arguments peuvent être combinées, '-' précède les versions longues des options, etc.

Cependant, dans certains cas, la capitalisation est utilisée pour inverser une option. Ainsi, '-d' pourrait signifier s'exécuter en tant que démon, mais '-D' serait pas s'exécuter en tant que démon. (Pourquoi ne pas simplement omettre l'option si vous ne la souhaitez pas? Cela n'a jamais été clair, mais c'est en fait assez courant, donc je pense qu'il doit y avoir une raison.) Mais dans certains programmes, un capital est une option complètement indépendante; si '-d' est exécuté en tant que démon, '-D' pourrait être pour activer le mode de débogage. Y a-t-il une sorte de principe général derrière cela, et lequel est le meilleur à choisir? Ou avons-nous simplement affaire à "ce qui fonctionne"?

Il existe également des commandes qui, en plus (ou au lieu de) des options avec des arguments, prennent uniquement des arguments isolés. cp en est un bon exemple; à part quelques bascules rarement utilisées, le dernier argument qu'il reçoit est présumé être la destination, et tous les arguments entre la liste d'options et la destination sont présumés être des sources. Existe-t-il une règle générale quand il est "correct" de s'appuyer sur un ordre comme celui-ci, au lieu d'utiliser des drapeaux d'options explicites avec des arguments?

47
DigitalMan

En général, oui.

33
ApriOri

ESR a rassemblé beaucoup d'informations à ce sujet dans son livre "The Art of UNIX Programming". Voici un extrait.

-une
Tous (sans argument). S'il existe une option --all de type GNU, pour -a être tout sauf synonyme, ce serait assez surprenant. Exemples: fuser (1), fetchmail (1).

Ajoutez, comme dans tar (1). Ceci est souvent associé à -d pour la suppression.

-b
Taille du tampon ou du bloc (avec argument). Définissez une taille de tampon critique ou (dans un programme lié à l'archivage ou à la gestion des supports de stockage) définissez une taille de bloc. Exemples: du (1), df (1), tar (1).

Lot. Si le programme est naturellement interactif, -b peut être utilisé pour supprimer les invites ou définir d'autres options appropriées pour accepter l'entrée d'un fichier plutôt que d'un opérateur humain. Exemple: flex (1).

-c
Commande (avec argument). Si le programme est un interpréteur qui prend normalement les commandes de l'entrée standard, il est prévu que l'option d'un argument -c lui soit transmise sous la forme d'une seule ligne d'entrée. Cette convention est particulièrement forte pour les shells et les interpréteurs de type Shell. Exemples: sh (1), ash (1), bsh (1), ksh (1), python (1). Comparez -e ci-dessous.

Vérifiez (sans argument). Vérifiez l'exactitude des arguments de fichier à la commande, mais n'effectuez pas réellement le traitement normal. Fréquemment utilisé comme option de vérification de la syntaxe par les programmes qui interprètent les fichiers de commandes. Exemples: getty (1), Perl (1).

Voir la liste complète sur http://catb.org/~esr/writings/taoup/html/ch10s05.html

19
user647772

L'interface de ligne de commande Linux/GNU suit la norme POSIX. Ceci est noté par GNU dans leurs normes: http://www.gnu.org/prep/standards/html_node/Command_002dLine-Interfaces.html .

La syntaxe de la ligne de commande fait également partie de la spécification Unix unique, bien que --long-options soit une innovation GNU IIRC.

Voir ici: http://pubs.opengroup.org/onlinepubs/7908799/xbd/utilconv.html

Mais oui, cette norme est implémentée comme getopt.

10
showMeYourPython

Un résumé rapide du fil:

  • Votre CLI doit afficher l'aide en cas de paramètres manquants ou incorrects en plus du message d'erreur éventuel.

  • Tu devrais utiliser - pour un drapeau ou une option à une seule lettre et -- pour une option longue, par exemple -a et --all

  • Tous les programmes doivent prendre en charge deux options standard: -v--version et -h--help.

    • -h et --help => Donner un message d'utilisation et quitter
    • -v et --version => Afficher la version du programme et quitter

Voir les liens (IEEE et GNU getopt) fournis sur cette réponse https://stackoverflow.com/a/8957246

2
JCB