Deutsch   English   Français   Italiano  
<875yk3xsbg.fsf@universite-de-strasbourg.fr.invalid>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!news.mixmin.net!aioe.org!K7PIs9tCGQ+WHJa7e6BylQ.user.46.165.242.75.POSTED!not-for-mail
From: Alain Ketterlin <alain@universite-de-strasbourg.fr.invalid>
Newsgroups: fr.comp.os.unix
Subject: Re: =?utf-8?Q?r=C3=A8gle?= pour =?utf-8?Q?=C3=A9crire?= les "usage:
 ..."
Date: Mon, 11 Jul 2022 23:17:23 +0200
Organization: =?utf-8?Q?Universit=C3=A9?= de Strasbourg
Message-ID: <875yk3xsbg.fsf@universite-de-strasbourg.fr.invalid>
References: <62c8c4eb$0$24781$426a74cc@news.free.fr>
	<tab00r$v6d7$1@dont-email.me> <62c98a7b$0$18716$426a74cc@news.free.fr>
	<87a69ix9rl.fsf@universite-de-strasbourg.fr.invalid>
	<62cc5318$0$18751$426a34cc@news.free.fr>
	<tahkuf$6ob$1@cabale.usenet-fr.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Injection-Info: gioia.aioe.org; logging-data="44387"; posting-host="K7PIs9tCGQ+WHJa7e6BylQ.user.gioia.aioe.org"; mail-complaints-to="abuse@aioe.org";
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux)
X-Notice: Filtered by postfilter v. 0.9.2
Cancel-Lock: sha1:gIzDEODHJhpAA4khaEuzh+aY4wk=
Bytes: 4398
Lines: 94

Olivier Miakinen <om+news@miakinen.net> writes:

> Le 11/07/2022 18:43, Thomas r=C3=A9pondait =C3=A0 Alain Ketterlin :

[...]
>>> Si l'ordre des options est sans importance, il vaut peut-=C3=AAtre mieu=
x en
>>> donner une liste lin=C3=A9aire, comme le fait en g=C3=A9n=C3=A9ral --he=
lp (ou le man).
>>> Un synopsis "mkdir [-m mode] [-p]" aurait l'air d'imposer l'ordre.
>>=20
>> ah ben tant mieux :
>> j'ai horreur de l'analyse de texte, et la lecture des arguments en fait=
=20
>> partie.
>> =C3=A7a me parait bcp moins compliqu=C3=A9 =C3=A0 faire avec un ordre im=
pos=C3=A9.

Je te comprends : dans ton cas, tu peux analyser les arguments avec une
cascade de if. Mais imagine que tu =C3=A9crives "ls" : difficile d'exiger l=
es
options dans l'ordre alphab=C3=A9tique.

> Permets-moi d'=C3=AAtre en complet d=C3=A9saccord avec toi sur ce point, =
parce que
> l=C3=A0 l'usage est quasiment universel, du moins pour toutes les options=
 avec
> tiret.
>
> Je veux dire que si la syntaxe propos=C3=A9e est :
> usage: rapid [-v] -ni [-od dir] gui_file...
>
> alors je m'attendrais =C3=A0 ce que toutes ces =C3=A9critures soient auto=
ris=C3=A9es :
> 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=C3=BBr je m'interdirais seulement de mettre 'dir' ailleurs que jus=
te
> derri=C3=A8re '-od', ou de mettre 'gui_file...' ailleurs qu'=C3=A0 la fin.

C'est la vision Posix, telle qu'elle est impl=C3=A9ment=C3=A9e dans la fonc=
tion
getopt() -- sauf que les options doivent =C3=AAtre mono-caract=C3=A8re. Dan=
s ce
cas (options -v -n -o), on =C3=A9crirait (en C) :

    while ((opt =3D getopt(argc, argv, "vno:")) !=3D -1) /* ":" =3D argumen=
t */
    {
        switch (opt)
        {
            case 'v':
                ...
                break;
            /* ... */
            case 'o':
                whatever =3D optarg;
                ...
                break;
            default:
                wtf ("option inconnue");
        }
    }
    if (optind >=3D 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 =C3=A9l=C3=A9ments de arg=
v si
n=C3=A9cessaire pour permettre "rapid gui1 -v gui2", traiter l'option "--"
pour permettre ensuite un fichier appel=C3=A9 "-guifile" ou m=C3=AAme "-v",
accepter "-vn" comme "-v -n", accepter "-odir" comme "-o dir", etc. J'en
oublie s=C3=BBrement.

Tellement pratique qu'on cherche rarement ailleurs. Par contre cela
oblige =C3=A0 la fin =C3=A0 v=C3=A9rifier la coh=C3=A9rence (si il y a une =
option -o il faut
qu'il y ait aussi l'option -n).

Presque tous les outils standard utilisent =C3=A7a, je pense (sauf les
commandes avec des options de folie, comme gcc). Les directives Posix
sont l=C3=A0 :

https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html#ta=
g_12_02

Et la GNU libc a ses propres extensions, par exemple pour permettre
"--verbose" etc.

-- Alain.