Bislang funktionierte folgendes auf der Bash immer problemlos
(bash-2.05b-38 unter SuSE 9.0)
lutz@merlin:~/Tmp> touch aa ll zz AAA LLL ZZZ
lutz@merlin:~/Tmp> ls
AAA LLL ZZZ aaa lll zzz
lutz@merlin:~/Tmp> rm [a-z]*
lutz@merlin:~/Tmp> ls
AAA LLL ZZZ
Hier werden ganz korrekt nur die Dateien gelöscht, die mit einem
Kleinbuchstaben beginnen.
-------------------------------------------------------------------
Aber nun mit der bash-2.05b-305.1 unter SuSE 9.1 erlebe ich nun
folgendes Phänomen:
lutz@p10:~/Tmp> touch aa ll zz AAA LLL ZZZ
lutz@p10:~/Tmp> ls
aa AAA ll LLL zz ZZZ
lutz@p10:~/Tmp> rm [a-z]*
lutz@p10:~/Tmp> ls
ZZZ
Hier werden nicht nur alle Dateien mit Kleinbuchstaben sondern auch
bis auf "ZZZ" die Dateien mit Großbuchstaben gelöscht!
-------------------------------------------------------------------
Wechsel ich dagegen auf der gleichen Konsole darauf zur csh
verhält sich die gleiche Befehlsfolge wieder wie gewohnt korrekt:
lutz@p10:~/Tmp> csh
lutz@p10:~/Tmp> echo $0
csh
lutz@p10:~/Tmp> touch aa bb zz AAA LLL ZZZ
lutz@p10:~/Tmp> ls
aa AAA ll LLL zz ZZZ
lutz@p10:~/Tmp> rm [a-z]*
lutz@p10:~/Tmp> ls
AAA LLL ZZZ
-------------------------------------------------------------------
Dieses Phänomen habe ich auf zwei weiteren Rechner mit SuSE 9.1
reproduzieren können. Übrigens tritt der Fehler nur bei normalen Nutzern
auf. Anscheinend ist in der Default-Einstellung der Variable LANG für normale Nutzer - zumindest für die Shell problembehaftet.
Als root auf der login-shell angemeldet, verhält sich die Shell
korrekt. Hier ist die Variable LANG nicht definiert:
p10:~/Tmp # echo $LANG
p10:~/Tmp #
p10:~/Tmp # touch aa ll zz AAA LLL ZZZ
p10:~/Tmp # ls
aa AAA ll LLL zz ZZZ
p10:~/Tmp # rm [a-z]*
p10:~/Tmp # ls
AAA LLL ZZZ
Doch selbst wenn ich bei SuSE 9.1 die Variable LANG für normale Nutzer ebenso undefiniert belasse, tritt der übliche Fehler auf:
lutz@p10: LANG=
lutz@p10:echo $LANG
lutz@p10:~/Tmp> touch aa ll zz AAA LLL ZZZ
lutz@p10:~/Tmp> ls
aa AAA ll LLL zz ZZZ
lutz@p10:~/Tmp> rm [a-z]*
lutz@p10:~/Tmp> ls
ZZZ
-------------------------------------------------------------------
Meine Vermutung, dass bei SuSE 9.1 die Unicode-Zuweisung "de_DE.UTF-8"
diese Phänomen verursacht, da bei SuSE 9.0 die LANG-Zuweisung für
user noch "de_DE@euro" lautete, bestätigt sich nicht.
Denn wenn ich bei SuSE 9.1 für normale User die gleiche LANG-Wert zuweise
wie unter SuSE 9.0 - bei der sich die Bash korrekt verhielt - tritt der
oben beschriebene Bash-Fehler - auch ohne UTF-8-Zuweisung - weiterhin
auf:
lutz@p10: LANG=de_DE@euro
lutz@p10:echo $LANG
de_DE@euro
lutz@p10:~/Tmp> touch aa ll zz AAA LLL ZZZ
lutz@p10:~/Tmp> ls
aa AAA ll LLL zz ZZZ
lutz@p10:~/Tmp> rm [a-z]*
lutz@p10:~/Tmp> ls
ZZZ
-------------------------------------------------------------------
Erst nach Neuzuweisung von LANG auf "C" oder "posix" verhält sich die
Bash auch unter SuSE 9.1 korrekt
lutz@p10:~/Tmp> LANG=C
lutz@p10:~/Tmp> echo $LANG
C
lutz@p10:~/Tmp> touch aa ll zz AAA LLL ZZZ
lutz@p10:~/Tmp> ls
aa AAA ll LLL zz ZZZ
lutz@p10:~/Tmp> rm [a-z]*
lutz@p10:~/Tmp> ls
AAA LLL ZZZ
Sogar die deutschen Umlaute und Sonderzeichen werden korrekt erkannt:
lutz@p10: ~/Tmp> echo "öäüÄÖÜß@" > umlaute+Sonderzeichen.txt
lutz@p10: ~/Tmp> cat umlaute+Sonderzeichen.txt
öäüÄÖÜß@
Hierbei stellt sich für mich die Frage, woher die Shell die lokalen
Zeichensätze kennt, da sie ja nun nicht mehr durch LANG-Variable
definiert werden.
-------------------------------------------------------------------
Zusammenfassend läßt sich aus dem Vorgenannten folgendes feststellen:
Die neue Default-Einstellung "de_DE.UTF-8" der LANG-Variable in /etc/sysconfig/language verursacht anscheinend erhebliche Fehler bei
der Bash. Dagegen arbeitet die C-Shell korrekt
Da allerdingsdie Bash die Default-Shell unter Linux ist, könnten
Shell-Skripte, in denen Löschungen für gematchte Dateien vorgenommen
werden zu Datenverlust führen!!!
Die noch bei SuSE 9.0 funktionierende LANG-Zuweisung "de_DE@euro"
verursacht nun bei SuSE 9.1 den gleichen Fehler beim Matchen von
Dateien.
Deshalb wären folgende Fragen DRINGEND zu klären:
Weshalb tritt das oben beschriebene fehlerhafte Bash-Verhalten bei
(auch bei gleicher LANG-Zuweisung wie unter SuSE 9.0) SuSE 9.1 auf?
Wie kann dieser Fehler unter Berücksichtigung der lokalen Sprachanpassung
behoben werden?
Beste Grüße,
Lutz
(bash-2.05b-38 unter SuSE 9.0)
lutz@merlin:~/Tmp> touch aa ll zz AAA LLL ZZZ
lutz@merlin:~/Tmp> ls
AAA LLL ZZZ aaa lll zzz
lutz@merlin:~/Tmp> rm [a-z]*
lutz@merlin:~/Tmp> ls
AAA LLL ZZZ
Hier werden ganz korrekt nur die Dateien gelöscht, die mit einem
Kleinbuchstaben beginnen.
-------------------------------------------------------------------
Aber nun mit der bash-2.05b-305.1 unter SuSE 9.1 erlebe ich nun
folgendes Phänomen:
lutz@p10:~/Tmp> touch aa ll zz AAA LLL ZZZ
lutz@p10:~/Tmp> ls
aa AAA ll LLL zz ZZZ
lutz@p10:~/Tmp> rm [a-z]*
lutz@p10:~/Tmp> ls
ZZZ
Hier werden nicht nur alle Dateien mit Kleinbuchstaben sondern auch
bis auf "ZZZ" die Dateien mit Großbuchstaben gelöscht!
-------------------------------------------------------------------
Wechsel ich dagegen auf der gleichen Konsole darauf zur csh
verhält sich die gleiche Befehlsfolge wieder wie gewohnt korrekt:
lutz@p10:~/Tmp> csh
lutz@p10:~/Tmp> echo $0
csh
lutz@p10:~/Tmp> touch aa bb zz AAA LLL ZZZ
lutz@p10:~/Tmp> ls
aa AAA ll LLL zz ZZZ
lutz@p10:~/Tmp> rm [a-z]*
lutz@p10:~/Tmp> ls
AAA LLL ZZZ
-------------------------------------------------------------------
Dieses Phänomen habe ich auf zwei weiteren Rechner mit SuSE 9.1
reproduzieren können. Übrigens tritt der Fehler nur bei normalen Nutzern
auf. Anscheinend ist in der Default-Einstellung der Variable LANG für normale Nutzer - zumindest für die Shell problembehaftet.
Als root auf der login-shell angemeldet, verhält sich die Shell
korrekt. Hier ist die Variable LANG nicht definiert:
p10:~/Tmp # echo $LANG
p10:~/Tmp #
p10:~/Tmp # touch aa ll zz AAA LLL ZZZ
p10:~/Tmp # ls
aa AAA ll LLL zz ZZZ
p10:~/Tmp # rm [a-z]*
p10:~/Tmp # ls
AAA LLL ZZZ
Doch selbst wenn ich bei SuSE 9.1 die Variable LANG für normale Nutzer ebenso undefiniert belasse, tritt der übliche Fehler auf:
lutz@p10: LANG=
lutz@p10:echo $LANG
lutz@p10:~/Tmp> touch aa ll zz AAA LLL ZZZ
lutz@p10:~/Tmp> ls
aa AAA ll LLL zz ZZZ
lutz@p10:~/Tmp> rm [a-z]*
lutz@p10:~/Tmp> ls
ZZZ
-------------------------------------------------------------------
Meine Vermutung, dass bei SuSE 9.1 die Unicode-Zuweisung "de_DE.UTF-8"
diese Phänomen verursacht, da bei SuSE 9.0 die LANG-Zuweisung für
user noch "de_DE@euro" lautete, bestätigt sich nicht.
Denn wenn ich bei SuSE 9.1 für normale User die gleiche LANG-Wert zuweise
wie unter SuSE 9.0 - bei der sich die Bash korrekt verhielt - tritt der
oben beschriebene Bash-Fehler - auch ohne UTF-8-Zuweisung - weiterhin
auf:
lutz@p10: LANG=de_DE@euro
lutz@p10:echo $LANG
de_DE@euro
lutz@p10:~/Tmp> touch aa ll zz AAA LLL ZZZ
lutz@p10:~/Tmp> ls
aa AAA ll LLL zz ZZZ
lutz@p10:~/Tmp> rm [a-z]*
lutz@p10:~/Tmp> ls
ZZZ
-------------------------------------------------------------------
Erst nach Neuzuweisung von LANG auf "C" oder "posix" verhält sich die
Bash auch unter SuSE 9.1 korrekt
lutz@p10:~/Tmp> LANG=C
lutz@p10:~/Tmp> echo $LANG
C
lutz@p10:~/Tmp> touch aa ll zz AAA LLL ZZZ
lutz@p10:~/Tmp> ls
aa AAA ll LLL zz ZZZ
lutz@p10:~/Tmp> rm [a-z]*
lutz@p10:~/Tmp> ls
AAA LLL ZZZ
Sogar die deutschen Umlaute und Sonderzeichen werden korrekt erkannt:
lutz@p10: ~/Tmp> echo "öäüÄÖÜß@" > umlaute+Sonderzeichen.txt
lutz@p10: ~/Tmp> cat umlaute+Sonderzeichen.txt
öäüÄÖÜß@
Hierbei stellt sich für mich die Frage, woher die Shell die lokalen
Zeichensätze kennt, da sie ja nun nicht mehr durch LANG-Variable
definiert werden.
-------------------------------------------------------------------
Zusammenfassend läßt sich aus dem Vorgenannten folgendes feststellen:
Die neue Default-Einstellung "de_DE.UTF-8" der LANG-Variable in /etc/sysconfig/language verursacht anscheinend erhebliche Fehler bei
der Bash. Dagegen arbeitet die C-Shell korrekt
Da allerdingsdie Bash die Default-Shell unter Linux ist, könnten
Shell-Skripte, in denen Löschungen für gematchte Dateien vorgenommen
werden zu Datenverlust führen!!!
Die noch bei SuSE 9.0 funktionierende LANG-Zuweisung "de_DE@euro"
verursacht nun bei SuSE 9.1 den gleichen Fehler beim Matchen von
Dateien.
Deshalb wären folgende Fragen DRINGEND zu klären:
Weshalb tritt das oben beschriebene fehlerhafte Bash-Verhalten bei
(auch bei gleicher LANG-Zuweisung wie unter SuSE 9.0) SuSE 9.1 auf?
Wie kann dieser Fehler unter Berücksichtigung der lokalen Sprachanpassung
behoben werden?
Beste Grüße,
Lutz
Code:
Code: