[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