Je me demandais pourquoi certains programmes requièrent que leurs paramètres d'invite de commande aient deux tirets devant, alors que d'autres (la plupart) n'exigent qu'un tiret devant?
Par exemple, la plupart des programmes ressemblent à ceci: relaxer -dtd toc.xml toc_gr.xml toc_jp.xml
Alors que certains programmes ressemblent à ceci: xmllint --valid toc.xml --noout
Quelle est la raison pour laquelle certains nécessitent deux tirets au lieu d'un? Ne convient-il pas à tout le monde de s'en tenir à une norme (un tiret suffit).
linux
windows
command-line
unix
Pacerier
la source
la source
-i
vs--input
ou-n
--dry-run
.-dtd
aurait vraiment dû être--dtd
? En réalité, je me demandais ce que le tiret (et le double tiret) essayait de signifier?--long-options
acceptent également toute abréviation unique. Donc, pour un programme avec des options--file-in
et--file-out
, vous pouvez utiliser--file-o=foo
ou--file-i=foo
, ce qui peut vous éviter de taper--very-long-optional-parameters
.convert
,mogrify
) ont « long » options utilisant un seul tiret. Par exemple:xterm -fn 6x10 -geometry 80x24+30+200
. Les abréviations sont pris en charge, à condition qu'ils soient distincts ( par exemple ,-g
ou-geom
pour-geometry
). Voir X (7) pour d'autres exemples.Réponses:
Faites juste
ls --help
et regardez les options; cela devrait être évident pour vous.Cela n'a rien à voir avec les paramètres. De nombreuses options ont une forme abrégée et une forme longue, et beaucoup ont l’une et pas l’autre.
Et aussi, en ce qui concerne les paramètres, c’est tout simplement que dans la forme longue, quand ils prennent un paramètre, on dirait qu’il est toujours avec un égal. Mais évidemment, les plus courts peuvent prendre tout autant de paramètres mais ils n'utilisent pas un égal.
Voici un extrait de
ls --help
(man ls
donne des informations équivalentes). Remarquez comment certains ont une forme longue sans une forme courte (--author
,--block-size
), certains ont une forme courte sans une forme longue (-c
,-f
,-g
), et certains ont à la fois une forme longue et une forme courte (-A
/--almost-all
,-b
/--escape
).la source
ls --help
sur windows?ls
de Windows. La commande équivalente seraitdir /?
. Vous utilisez un logiciel multiplateforme qui ne respecte pas les conventions Windows habituelles, voir ma réponse.ls --help
extrait. Voir--author
et--block-size
.ls
commande des systèmes Windows modernes est via GIT . Le shell bash GIT ou la fenêtre CMD avec GIT bin dans le chemin PATH aurals
.Il n'y a pas de norme répandue. Il y a une certaine cohérence, par exemple dans les programmes GNU, mais vous devez vérifier la documentation de chaque programme.
Citant Wikipedia , mon emphase:
En règle générale, les traits d'union indiquent un argument prédéfini. Je pense que cela sert à les différencier, par exemple, des noms de fichiers ou d’autres étiquettes que vous pourriez utiliser comme arguments. Ce n'est pas toujours le cas, cependant (voir ci-dessous).
Vous trouverez souvent le même argument disponible à la fois comme option courte et comme option longue, comme par exemple dans ls .
Certains programmes utilisent un seul trait d'union pour les options à un caractère et deux traits d'union pour les options à plusieurs caractères, mais pas tous (on pense
find
à GNU ). Certains programmes ont des traits d'union optionnels ou les sautent complètement (tar
ou BSDps
vient à l'esprit).Parfois, les options longues (
--foo
) nécessitent des arguments, alors que les options courtes (-f
) ne le font pas (ou du moins, impliquent un argument par défaut spécifique).Les options courtes (par exemple
cut -d ' '
) peuvent avoir des arguments, alors que les options longues (par exemplels --all
) ne les ont pas nécessairement.Pour définir un comportement particulier d'un programme, vous devez parfois utiliser une option courte. Pour d'autres, vous devez utiliser une option longue et, pour certains, vous avez le choix.
Sur une note connexe, certains programmes ne peuvent gérer aucun espace entre une option et son argument , d’autres ne le peuvent pas.
Comme je l'ai écrit au début, il n'y a tout simplement pas de comportement ou de norme commun. Souvent, vous pouvez suivre un comportement similaire à la même bibliothèque que celle utilisée pour l'analyse des arguments, mais vous ne voulez probablement pas lire les sources pour le découvrir.
Vous ne pouvez vraiment pas déduire la syntaxe d'argument d'un programme de celle d'un autre.
Si vous considérez également Windows, la situation empire: alors que les appels de ligne de commande Windows utilisent traditionnellement
/f
(du moins la plupart du temps, des caractères simples) des options, avec:
comme séparateur les options et leur valeur (voir par exemple ici ); Les utilitaires multiplates-formes sont répandus (tels que ceux que vous avez mentionnés) et apportent la syntaxe de trait d'union plus courante pour les arguments, avec toutes les incohérences mentionnées ci-dessus.la source
tar
,ps
,find
et tel eu leur syntaxe de ligne de commande définie par POSIX avant cette norme avait complètement gélifiée. Sur un système Gnu / Linux, il est un assez fort à parier que au moins--help
sera (presque) toujours être pris en charge, ainsi queman <command>
ouinfo <command>
find
qui ne suit pas la "convention GNU" pour les options longues (probablement pour des raisons de conformité POSIX, comme l'a souligné @BRPocock). Je voudrais renvoyer +1 si je pouvais, pour mentionner les "commutateurs" de ligne de commande DOS / Windows, puisque la question du PO a été étiquetée comme "fenêtres", et que cette convention doit être mentionnée pour être complète.Ceci est une convention venant de * nix. Un double trait d'union précède les options lorsqu'elles sont écrites intégralement , alors qu'un trait d'union précède les options lorsqu'elles sont écrites sous une forme abrégée . Par exemple
ls --all --l
, peut être raccourci àls -al
. Comme on le voit, toutes les options n’ont pas leur équivalent lettre unique, bien que les plus utilisées en aient généralement.Le fait que l'option prenne un argument ne fait pas vraiment la différence - il peut soit les accepter, soit ne pas les accepter, quelle que soit la manière dont vous entrez l'option.
Cela n'a pas vraiment d'importance si vous les écrivez pour une utilisation ponctuelle, mais lorsque vous écrivez des commandes, par exemple dans des fichiers .alias, il est habituel d'utiliser le formulaire complet. Purement pour la facilité de lecture pour la prochaine personne.
la source
ce sont des syntaxes UNIX conventionnelles,
un argument de programme prend un trait d'union ("-") suivi d'une seule lettre lorsqu'il s'agit d'une simple option (par exemple: -v ) et de deux trait d'union ("-") lorsque l'option accepte des arguments (par exemple: --file toc.xml ou --file = toc.xml )
aucun impact sur la fonctionnalité du programme.
la source
--noout
(dans la question ci-dessus) aurait vraiment dû être écrit comme-noout
il n’a pas d’ arguments ?Le tiret simple est implémenté par getopt et est une fonction standard posix, un tiret double dans getopt_long et est un standard gnu.
Traditionnellement, un seul tiret fournit une option à un seul caractère comme celle-ci:
-A ou -V etc. mais ne doit pas nécessairement être limité à cela. Par exemple, -Wall for gcc active tous les avertissements du compilateur pour la commande du compilateur gcc.
les arguments à double tiret ont tendance à être plus bavards et prennent souvent un paramètre fourni tel que --max-count = NUM. Cependant, --version ne prend pas d'égal.
De manière générale, il n’existe pas de règles ni de normes définies concernant la manière dont les arguments de programme doivent être spécifiés, mais uniquement un ensemble de traditions. Toutefois, si les fonctions d'analyse de ligne de commande getopt et getopt_long sont utilisées, les paramètres doivent généralement respecter la norme, car les fonctions de bibliothèque imposent une certaine manière de le faire.
la source