• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[solved] Bash-Fehler unter SuSE 9.1

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

Code:
Code:
 

SoeDib

Member
Kann das Verhalten nicht reproduzieren.

bash: 2.05b-305.1
Benutzer: Standardbenutzer
$LANG:de_DE@euro

Auch wenn ich $LANG auf de_DE.UTF-8 setze, arbeitet meine bash korrekt. Entweder das Problem hat nichts mit $LANG zu tun, oder es sind noch zusätzliche Faktoren im Spiel ($LC_COLLATE ? $LC_CTYPE ?)

Gruß,
SD
 

r_heide

Newbie
Habe das nun auch ausprobiert und muß das seltsame Verhalten der bash leider bestätigen.
Ich habe den Eindruck, dass das alphabet dort so sortiert ist:
aAbBcC...zZ
Eine leichte Abwandlung des Versuchs von Lutz
utz@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
mit
rm [l-z]*
ergibt
aa AAA ZZZ
 
Hast Du mal in /etc/sysconfig/language
Code:
RC_LC_COLLATE="POSIX"
gesetzt? Das mußte ich schon in der SuSE 9.0 machen, um eine für mich akzeptable Sortierung zu erhalten (Punkt-Dateien am Anfang, nicht zwischensortiert usw.).
 
Oben