[gull] Bug locale avec la knoppix

Olivier Bornet Olivier.Bornet at puck.ch
Thu Oct 2 14:41:01 CEST 2003


Hello,

> Truc très drôle avec la knoppix-mib 3.2:

Pas spécifique à la knoppix-mib à mon avis. Sur ma debian testing, c'est
du même genre.

>    avec la locale fr_CH:
>        ls /usr/bin/m*[A-Z]*
>    retourne tous les fichiers commençant par m alors qu'il n'ont pas
>    de [A-Z]

Pas tout à fait. (cf plus loin)

>    avec la locale C:
>       knoppix at ttyp2[knoppix]$ export LANG=C

ça peut ne pas suffir pour tester. (cf plus loin)

> Sur une Debian stable avec la locale fr_CH je n'ai pas ce problème non
> plus.

En fait, selon le man de bash, c'est pas seulement LANG qui importe,
mais LC_COLLATE. (voir man bash, partie Pattern Matching du chapitre
EXPANSION). Si tu as déjà quelque chose setté pour LC_COLLATE, un
"export LANG=C" ne change pas LC_COLLATE:

    $ export LC_COLLATE=C
    $ locale
    LANG=en_US
    LC_CTYPE=fr_CH
    LC_NUMERIC="en_US"
    LC_TIME="en_US"
    LC_COLLATE=C
    LC_MONETARY="en_US"
    LC_MESSAGES="en_US"
    LC_PAPER="en_US"
    LC_NAME="en_US"
    LC_ADDRESS="en_US"
    LC_TELEPHONE="en_US"
    LC_MEASUREMENT="en_US"
    LC_IDENTIFICATION="en_US"
    LC_ALL=
    $ export LANG=fr_CH
    $ locale
    LANG=fr_CH
    LC_CTYPE=fr_CH
    LC_NUMERIC="fr_CH"
    LC_TIME="fr_CH"
    LC_COLLATE=C
    LC_MONETARY="fr_CH"
    LC_MESSAGES="fr_CH"
    LC_PAPER="fr_CH"
    LC_NAME="fr_CH"
    LC_ADDRESS="fr_CH"
    LC_TELEPHONE="fr_CH"
    LC_MEASUREMENT="fr_CH"
    LC_IDENTIFICATION="fr_CH"
    LC_ALL=

On voit que le LC_COLLATE ne change pas avec le export LANG=fr_CH.

Maintenant, c'est vrai, le LC_COLLATE n'est en général pas setté par les
utilisateurs. Un petit exemple:
($ commandes, # commentaires, sinon résultat de la commande):

    $ mkdir test_collate
    $ cd test_collate
    $ touch a b c d e f g h i j k l m n o p q r s t u v w x y z
    $ touch A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
    #
    # on a alors une série de fichiers avec toutes les lettres
    # en majuscule et minuscule
    #
    $ unset LANG LC_CTYPE LC_COLLATE
    #
    # reset des locales
    #
    $ export LC_COLLATE=C
    $ echo [C-G]
    C D E F G
    #
    # parfait
    #
    $ export LC_COLLATE=fr_CH
    $ echo [C-G]
    C d D e E f F g G
    #
    # hoops !!! en fait, l'ordre des lettre avec fr_CH est a A b B ...
    #
    $ export LC_COLLATE=en_US
    $ echo [C-G]
    C d D e E f F g G
    #
    # idem avec en_US
    #

Donc, avec la commande "ls /usr/bin/m*[A-Z]*", tu auras pas tous les
fichiers, commençant par m, mais ceux commençant par m, et ayant une des
lettres A-Z ou b-z dans le nom. (donc, ma maa maaa ne seront pas
affichés).

(explication trouvée dans le bug debian #203820, avec pl_PL, mais le
même principe).

Le plus important, c'est:

si on a LANG=fr_CH (mais aussi en_US, pl_PL, ...), un ordre du genre:

	rm [A-Z]*

va effacher tous les fichiers commançant par A B C ... Z, comme désiré,
mais aussi ceux commançant par b c d .. z. Ce qui n'est en général pas
souhaité ! Seul les fichiers commançant par a seront épargnés.

Ca semble venir de la norme POSIX.

Bonne journée.

		Olivier
-- 
Olivier Bornet                 |      français : http://puck.ch/f
Swiss Ice Hockey Results       |      english  : http://puck.ch/e
http://puck.ch/                |      deutsch  : http://puck.ch/g
Olivier.Bornet at puck.ch         |      italiano : http://puck.ch/i
Get my PGP-key at http://puck.ch/pgp or at http://wwwkeys.pgp.net
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
URL: <http://forum.linux-gull.ch/pipermail/gull/attachments/20031002/124c4606/attachment.pgp>


More information about the gull mailing list