Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

règle pour écrire les "usage: ..."

34 réponses
Avatar
Thomas
bonjour :-)


est-ce qu'on peut trouver qqpart une règle pour écrire les "usage: ..." ?

par ex, je sais que [] indique qqch de facultatif, mais il y a plein
d'autres choses que je ne connais pas / pas bien.


par ex, si j'écris :

usage: rapid [-v] (gui_file | -ni [-od dir] gui_file...)

est-ce que tout le monde comprend, sans ambiguité ?

--
RAPID maintainer
http://savannah.nongnu.org/projects/rapid/

10 réponses

1 2 3 4
Avatar
ST
On 2022-07-08, Thomas wrote:
bonjour :-)
est-ce qu'on peut trouver qqpart une règle pour écrire les "usage: ..." ?
par ex, je sais que [] indique qqch de facultatif, mais il y a plein
d'autres choses que je ne connais pas / pas bien.
par ex, si j'écris :
usage: rapid [-v] (gui_file | -ni [-od dir] gui_file...)
est-ce que tout le monde comprend, sans ambiguité ?

"-v" est optionnel
Le "|" marque est un choix entre ce qui est Í  gauche et ce qui est Í 
droite, dans lequel "-od dir" est optionnel.
Avatar
Olivier Miakinen
Le 09/07/2022 01:59, Thomas a écrit :
par ex, si j'écris :
usage: rapid [-v] (gui_file | -ni [-od dir] gui_file...)
est-ce que tout le monde comprend, sans ambiguité ?

Voici ce que je comprends, toi seul peut dire si ça correspond sans
ambiguité Í  ce que tu voulais dire. Pour moi, les syntaxes possibles
sont les suivantes :
rapid gui_file
rapid -ni gui_files
rapid -ni -od dir gui_files
rapid -v gui_file
rapid -v -ni gui_files
rapid -v -ni -od dir gui_files
... o͹ « gui_file » représente un fichier et un seul, tandis que
« gui_files » représente au moins un fichier, sans limite de nombre.
--
Olivier Miakinen
Avatar
Thomas
In article <tab4gn$1cmq$,
Olivier Miakinen <om+ wrote:
Le 09/07/2022 01:59, Thomas a écrit :
par ex, si j'écris :
usage: rapid [-v] (gui_file | -ni [-od dir] gui_file...)


tiens c'est pas bon, j'aurais du écrire ça :
usage: rapid [-v] ([gui_file] | -ni [-od dir] gui_file...)
est-ce que tout le monde comprend, sans ambiguité ?

Voici ce que je comprends, toi seul peut dire si ça correspond sans
ambiguité Í  ce que tu voulais dire.

si je te comprend bien, pour toi il n'y a pas d'ambiguité, cad pas de
"zone floue" ou ce genre de truc ?
Pour moi, les syntaxes possibles
sont les suivantes :
rapid gui_file
rapid -ni gui_files
rapid -ni -od dir gui_files
rapid -v gui_file
rapid -v -ni gui_files
rapid -v -ni -od dir gui_files
... o͹ « gui_file » représente un fichier et un seul, tandis que
« gui_files » représente au moins un fichier, sans limite de nombre.

c'est exact :-)
je suppose que tu aurais trouvé qu'il fallait ajouter
rapid
rapid -v
--
RAPID maintainer
http://savannah.nongnu.org/projects/rapid/
Avatar
Thomas
In article <tab00r$v6d7$, ST wrote:
On 2022-07-08, Thomas wrote:
bonjour :-)
est-ce qu'on peut trouver qqpart une règle pour écrire les "usage: ..." ?
par ex, je sais que [] indique qqch de facultatif, mais il y a plein
d'autres choses que je ne connais pas / pas bien.
par ex, si j'écris :
usage: rapid [-v] (gui_file | -ni [-od dir] gui_file...)
est-ce que tout le monde comprend, sans ambiguité ?

"-v" est optionnel
Le "|" marque est un choix entre ce qui est Í  gauche et ce qui est Í 
droite, dans lequel "-od dir" est optionnel.

je me posais des questions notamment sur :
- () que je ne me rappelle pas avoir vu (j'ai utilisé ça comme le
symbole mathématique)
- ... que j'ai déjÍ  vu, mais ça me donne une sensation de non-rigoureux
(donc je posais la question en même temps, ça coute rien ...)
- je crois qu'on utilise qqfois {}, mais je ne me rappelle plus ce que
ça veut dire.
en passant, je viens de m'apercevoir qu'avant on avait :
$ ls -z
ls: illegal option -- z
usage: ls [-ABCFGHLOPRSTUWabcdefghiklmnopqrstuwx1] [file ...]
$ mkdir -a
mkdir: illegal option -- a
usage: mkdir [-pv] [-m mode] directory ...
et maintenant :
$ ls -z
ls : option invalide -- 'z'
Saisissez «Â ls --help » pour plus d'informations.
$ mkdir -a
mkdir : option invalide -- 'a'
Saisissez «Â mkdir --help » pour plus d'informations.
est-ce que le "usage: ..." serais tombé en désuétude ?
--
RAPID maintainer
http://savannah.nongnu.org/projects/rapid/
Avatar
Olivier Miakinen
Le 09/07/2022 15:38, Thomas a écrit :
In article <tab4gn$1cmq$,
Olivier Miakinen <om+ wrote:
Le 09/07/2022 01:59, Thomas a écrit :
par ex, si j'écris :
usage: rapid [-v] (gui_file | -ni [-od dir] gui_file...)


tiens c'est pas bon, j'aurais du écrire ça :
usage: rapid [-v] ([gui_file] | -ni [-od dir] gui_file...)

Avoir une option vide parmi un choix d'options non optionnelles ne me
semble pas très clair. Voir plus loin.
...
rapid gui_file
rapid -ni gui_files
rapid -ni -od dir gui_files
rapid -v gui_file
rapid -v -ni gui_files
rapid -v -ni -od dir gui_files
... o͹ « gui_file » représente un fichier et un seul, tandis que
« gui_files » représente au moins un fichier, sans limite de nombre.

c'est exact :-)
je suppose que tu aurais trouvé qu'il fallait ajouter
rapid
rapid -v

Je te propose la façon suivante, beaucoup plus claire ÀMHA :
usage: rapid [-v] [ gui_file | -ni [-od dir] gui_file... ]
--
Olivier Miakinen
Avatar
Alain Ketterlin
Thomas writes:
In article <tab00r$v6d7$, ST wrote:
On 2022-07-08, Thomas wrote:
bonjour :-)
est-ce qu'on peut trouver qqpart une règle pour écrire les "usage: ..." ?
par ex, je sais que [] indique qqch de facultatif, mais il y a plein
d'autres choses que je ne connais pas / pas bien.



Pour ma part, je comprendrais tout de suite [], | (avec ou sans
parenthèses autour si c'est simple), et ... pour la répétition.
Je ne crois pas qu'il y ait vraiment un standard. C'est essentiellement
un notation pour des expressions régulières, avec ... qui est plus utile
que * (ce serait + pour les expressions régulières, mais ce n'est pas
une construction primitive). Mais c'est rare qu'on ait besoin de toute la
puissance des expression régulières pour des arguments, donc les
notations sont plus "intuitives".
par ex, si j'écris :
usage: rapid [-v] (gui_file | -ni [-od dir] gui_file...)
est-ce que tout le monde comprend, sans ambiguité ?

"-v" est optionnel
Le "|" marque est un choix entre ce qui est Í  gauche et ce qui est Í 
droite, dans lequel "-od dir" est optionnel.

je me posais des questions notamment sur :
- () que je ne me rappelle pas avoir vu (j'ai utilisé ça comme le
symbole mathématique)

Personnellement je préfère éviter |, ce qui évite aussi les parenthèses
en général. Par exemple, chez moi la page de man de sort indique
sort [OPTION]... [FILE]...
sort [OPTION]... --files0-from=F
(note le retour de l'étoile, sous la forme [x]...)
- ... que j'ai déjÍ  vu, mais ça me donne une sensation de non-rigoureux
(donc je posais la question en même temps, ça coute rien ...)

Je pense qu'il y a un peu de folklore lÍ -dessous : les grammaires des
langages de programmation sont souvent décrites dans le formalisme BNF
(Backus Naur Form -- ou EBNF quand c'est "extended"), c'est-Í -dire avec
des expressions régulières en partie droite. C'est donc souvent *très*
rigoureux.
J'ai le souvenir de manuels SQL qui utilisaient massivement ... (peut
être parce que c'est "visuel"). L'usage dans les synposis de commandes
est sͻrement plus ancien, cela dit.
- je crois qu'on utilise qqfois {}, mais je ne me rappelle plus ce que
ça veut dire.

Répétition un nombre explicite (ou un intervalle de nombres) : FILE{3,7}
signifierait "entre 3 et 7 fichiers". C'est comme ça que je le
comprendrais, mais je ne crois pas l'avoir jamais vu utilisé pour des
arguments de commandes.
en passant, je viens de m'apercevoir qu'avant on avait :
$ ls -z
ls: illegal option -- z
usage: ls [-ABCFGHLOPRSTUWabcdefghiklmnopqrstuwx1] [file ...]

Encore une notation différente : ici [] signifie aussi bien "optionnel"
que "n'importe lesquels des caractères de la liste" ; dans le second cas,
le "-" doit être en tête. Cela ne correspond Í  aucune notation formelle
connue, mais je pense que tout le monde comprend.
Bref, c'est la jungle, mais [], |, et ... sont usuels pour des arguments
de commande.
et maintenant :
$ ls -z
ls : option invalide -- 'z'
Saisissez «Â ls --help » pour plus d'informations.
$ mkdir -a
mkdir : option invalide -- 'a'
Saisissez «Â mkdir --help » pour plus d'informations.
est-ce que le "usage: ..." serais tombé en désuétude ?

Si l'ordre des options est sans importance, il vaut peut-être mieux en
donner une liste linéaire, comme le fait en général --help (ou le man).
Un synopsis "mkdir [-m mode] [-p]" aurait l'air d'imposer l'ordre.
Pour "ls" il y a tellement d'options (avec certaines uniquement sous
forme longue) qu'un synopsis n'a plus grand sens de toute façon. La
seule question que je me pose en voyant le "usage" ci-dessus est :
pourquoi pas -j ou -z ? Mais le chance que j'y trouve l'option que je
cherche est Í  peu près nulle.
-- Alain.
Avatar
Thomas
In article ,
Alain Ketterlin wrote:
Thomas writes:
In article <tab00r$v6d7$, ST wrote:
On 2022-07-08, Thomas wrote:
> bonjour :-)
>
>
> est-ce qu'on peut trouver qqpart une règle pour écrire les "usage: ..." ?
>
> par ex, je sais que [] indique qqch de facultatif, mais il y a plein
> d'autres choses que je ne connais pas / pas bien.

Pour ma part, je comprendrais tout de suite [], | (avec ou sans
parenthèses autour si c'est simple), et ... pour la répétition.
je me posais des questions notamment sur :
- () que je ne me rappelle pas avoir vu (j'ai utilisé ça comme le
symbole mathématique)

Personnellement je préfère éviter |, ce qui évite aussi les parenthèses
en général. Par exemple, chez moi la page de man de sort indique
sort [OPTION]... [FILE]...
sort [OPTION]... --files0-from=F

bonne idée :-)
je préfère ta proposition que celle d'Olivier, parce que -ni ne désigne
pas une simple option facultative, mais un mode de fonctionnement très
différent (GUI/CLI)
(sans ça, la proposition d'Olivier était très bien)
(note le retour de l'étoile, sous la forme [x]...)

perso j'aurais préféré [x...]
(sachant que les 2 sont parfaitement équivalents)
en fait, pour l'ambiguité, il est permis d'avoir un minuscule doute :
est-ce que
x [y] ...
équivaut Í 
x ([y] ...)
ou Í 
(x [y]) ...
?
usage: ls [-ABCFGHLOPRSTUWabcdefghiklmnopqrstuwx1] [file ...]

Encore une notation différente : ici [] signifie aussi bien "optionnel"
que "n'importe lesquels des caractères de la liste" ; dans le second cas,
le "-" doit être en tête. Cela ne correspond Í  aucune notation formelle
connue, mais je pense que tout le monde comprend.

ça fait longtemps que je connais ça (alors j'ai des réflexes)
cad que, [] signifie tjr "optionnel",
mais ce n'est pas une option d'un seul bloc, mais n'importe quelle
combinaison des lettres proposées, y compris aucune ou toutes.
(j'avais pas remarqué, mais ce que j'ai écrit pourrais aussi être
interprété comme ça alors que ça n'est pas ce que je veux dire, pour moi
c'est bien une option d'un seul bloc)
Bref, c'est la jungle, mais [], |, et ... sont usuels pour des arguments
de commande.

merci :-)
est-ce que le "usage: ..." serais tombé en désuétude ?

Si l'ordre des options est sans importance, il vaut peut-être mieux en
donner une liste linéaire, comme le fait en général --help (ou le man).
Un synopsis "mkdir [-m mode] [-p]" aurait l'air d'imposer l'ordre.

ah ben tant mieux :
j'ai horreur de l'analyse de texte, et la lecture des arguments en fait
partie.
ça me parait bcp moins compliqué Í  faire avec un ordre imposé.
dans l'erreur j'ai précisé :
Unknown or misplaced switch
^^^^^^^^^
--
RAPID maintainer
http://savannah.nongnu.org/projects/rapid/
Avatar
Olivier Miakinen
Le 11/07/2022 18:43, Thomas répondait Í  Alain Ketterlin :
Personnellement je préfère éviter |, ce qui évite aussi les parenthèses
en général. Par exemple, chez moi la page de man de sort indique
sort [OPTION]... [FILE]...
sort [OPTION]... --files0-from=F

bonne idée :-)
je préfère ta proposition que celle d'Olivier

Ça tombe très bien, parce que moi aussi. :-)
Il se trouve simplement que je n'y avais pas pensé, mais cette méthode me
semble aussi éminemment préférable
(note le retour de l'étoile, sous la forme [x]...)

perso j'aurais préféré [x...]
(sachant que les 2 sont parfaitement équivalents)
en fait, pour l'ambiguité, il est permis d'avoir un minuscule doute :

Pas vraiment ici.
est-ce que
x [y] ...
équivaut Í 
x ([y] ...)
ou Í 
(x [y]) ...
?

Dans l'exemple donné par Alain il n'est absolument pas question de :
x [y] ...
mais de :
x [y]...
L'absence d'espace entre le crochet et les trois points ne laisse ÀMHA
aucun doute sur l'interprétation de cette écriture.
Si l'ordre des options est sans importance, il vaut peut-être mieux en
donner une liste linéaire, comme le fait en général --help (ou le man).
Un synopsis "mkdir [-m mode] [-p]" aurait l'air d'imposer l'ordre.

ah ben tant mieux :
j'ai horreur de l'analyse de texte, et la lecture des arguments en fait
partie.
ça me parait bcp moins compliqué Í  faire avec un ordre imposé.

Permets-moi d'être en complet désaccord avec toi sur ce point, parce que
lÍ  l'usage est quasiment universel, du moins pour toutes les options avec
tiret.
Je veux dire que si la syntaxe proposée est :
usage: rapid [-v] -ni [-od dir] gui_file...
alors je m'attendrais Í  ce que toutes ces écritures soient autorisées :
rapid -v -ni -od dir gui_file...
rapid -ni -v -od dir gui_file...
rapid -ni -od dir -v gui_file...
rapid -v -od dir -ni gui_file...
rapid -od dir -v -ni gui_file...
rapid -od dir -ni -v gui_file...
Bien sͻr je m'interdirais seulement de mettre 'dir' ailleurs que juste
derrière '-od', ou de mettre 'gui_file...' ailleurs qu'Í  la fin.
dans l'erreur j'ai précisé :
Unknown or misplaced switch
^^^^^^^^^

Cela me semble une brutalité excessive pour l'utilisateur, avec un risque
qu'il te maudisse jusqu'Í  la cinquantième génération.
--
Olivier Miakinen
Avatar
Alain Ketterlin
Olivier Miakinen <om+ writes:
Le 11/07/2022 18:43, Thomas répondait Í  Alain Ketterlin :

[...]
Si l'ordre des options est sans importance, il vaut peut-être mieux en
donner une liste linéaire, comme le fait en général --help (ou le man).
Un synopsis "mkdir [-m mode] [-p]" aurait l'air d'imposer l'ordre.

ah ben tant mieux :
j'ai horreur de l'analyse de texte, et la lecture des arguments en fait
partie.
ça me parait bcp moins compliqué Í  faire avec un ordre imposé.


Je te comprends : dans ton cas, tu peux analyser les arguments avec une
cascade de if. Mais imagine que tu écrives "ls" : difficile d'exiger les
options dans l'ordre alphabétique.
Permets-moi d'être en complet désaccord avec toi sur ce point, parce que
lÍ  l'usage est quasiment universel, du moins pour toutes les options avec
tiret.
Je veux dire que si la syntaxe proposée est :
usage: rapid [-v] -ni [-od dir] gui_file...
alors je m'attendrais Í  ce que toutes ces écritures soient autorisées :
rapid -v -ni -od dir gui_file...
rapid -ni -v -od dir gui_file...
rapid -ni -od dir -v gui_file...
rapid -v -od dir -ni gui_file...
rapid -od dir -v -ni gui_file...
rapid -od dir -ni -v gui_file...
Bien sͻr je m'interdirais seulement de mettre 'dir' ailleurs que juste
derrière '-od', ou de mettre 'gui_file...' ailleurs qu'Í  la fin.

C'est la vision Posix, telle qu'elle est implémentée dans la fonction
getopt() -- sauf que les options doivent être mono-caractère. Dans ce
cas (options -v -n -o), on écrirait (en C) :
while ((opt = getopt(argc, argv, "vno:")) != -1) /* ":" = argument */
{
switch (opt)
{
case 'v':
...
break;
/* ... */
case 'o':
whatever = optarg;
...
break;
default:
wtf ("option inconnue");
}
}
if (optind >= argc)
wtf ("il faut au moins un gui_file");
/* les "gui_file" sont argv[optind] etc. */
getopt() s'occupe de tout, y compris permuter les éléments de argv si
nécessaire pour permettre "rapid gui1 -v gui2", traiter l'option "--"
pour permettre ensuite un fichier appelé "-guifile" ou même "-v",
accepter "-vn" comme "-v -n", accepter "-odir" comme "-o dir", etc. J'en
oublie sͻrement.
Tellement pratique qu'on cherche rarement ailleurs. Par contre cela
oblige Í  la fin Í  vérifier la cohérence (si il y a une option -o il faut
qu'il y ait aussi l'option -n).
Presque tous les outils standard utilisent ça, je pense (sauf les
commandes avec des options de folie, comme gcc). Les directives Posix
sont lÍ  :
https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html#tag_12_02
Et la GNU libc a ses propres extensions, par exemple pour permettre
"--verbose" etc.
-- Alain.
Avatar
Thomas
In article <tahkuf$6ob$,
Olivier Miakinen <om+ wrote:
Le 11/07/2022 18:43, Thomas répondait Í  Alain Ketterlin :
Personnellement je préfère éviter |, ce qui évite aussi les parenthèses
en général. Par exemple, chez moi la page de man de sort indique
sort [OPTION]... [FILE]...
sort [OPTION]... --files0-from=F

bonne idée :-)
je préfère ta proposition que celle d'Olivier

Ça tombe très bien, parce que moi aussi. :-)
Il se trouve simplement que je n'y avais pas pensé, mais cette méthode me
semble aussi éminemment préférable

ok :-)
(note le retour de l'étoile, sous la forme [x]...)

perso j'aurais préféré [x...]
(sachant que les 2 sont parfaitement équivalents)
en fait, pour l'ambiguité, il est permis d'avoir un minuscule doute :

Pas vraiment ici.
est-ce que
x [y] ...
équivaut Í 
x ([y] ...)
ou Í 
(x [y]) ...
?

Dans l'exemple donné par Alain il n'est absolument pas question de :
x [y] ...
mais de :
x [y]...
L'absence d'espace entre le crochet et les trois points ne laisse ÀMHA
aucun doute sur l'interprétation de cette écriture.

je viens de m'apercevoir qu'au début je n'ai pas mis d'espace,
puis, en voyant qu'il y en avait dans les exemples trouvés sur mon ordi,
et puisque les arguments multipliés sont séparés par des espaces, j'ai
trouvé que c'était une bonne chose.
(pas la même signification que "..." dans les phrases, sans espace en
langue anglaise.)
donc je m'apprête Í  utiliser "x ...", et "[x ...]" quand j'en aurai
besoin. est-ce que j'ai tord ?
Si l'ordre des options est sans importance, il vaut peut-être mieux en
donner une liste linéaire, comme le fait en général --help (ou le man).
Un synopsis "mkdir [-m mode] [-p]" aurait l'air d'imposer l'ordre.

ah ben tant mieux :
j'ai horreur de l'analyse de texte, et la lecture des arguments en fait
partie.
ça me parait bcp moins compliqué Í  faire avec un ordre imposé.

Permets-moi d'être en complet désaccord avec toi sur ce point, parce que
lÍ  l'usage est quasiment universel, du moins pour toutes les options avec
tiret.

aie !
Je veux dire que si la syntaxe proposée est :
usage: rapid [-v] -ni [-od dir] gui_file...
alors je m'attendrais Í  ce que toutes ces écritures soient autorisées :
rapid -v -ni -od dir gui_file...
rapid -ni -v -od dir gui_file...
rapid -ni -od dir -v gui_file...
rapid -v -od dir -ni gui_file...
rapid -od dir -v -ni gui_file...
rapid -od dir -ni -v gui_file...
Bien sͻr je m'interdirais seulement de mettre 'dir' ailleurs que juste
derrière '-od', ou de mettre 'gui_file...' ailleurs qu'Í  la fin.

ce que tu demandes est suffisamment clair.
mais ensuite, comment fais-tu pour programmer ça ? ...
dans l'erreur j'ai précisé :
Unknown or misplaced switch
^^^^^^^^^

Cela me semble une brutalité excessive pour l'utilisateur, avec un risque
qu'il te maudisse jusqu'Í  la cinquantième génération.

je vais voir ce que je peux faire, mais je ne te promet rien.
je trouve que c'est d'une brutalité déjÍ  suffisante, d'avoir Í  traiter
une liste d'arguments de commande qui soit autre chose qu'une simple
liste de fichiers ! :-)
--
RAPID maintainer
http://savannah.nongnu.org/projects/rapid/
1 2 3 4