Re: Eigenatiges BASH problem...

2005-03-24 Diskussionsfäden Gerhard Meier
On Wed, Mar 23, 2005 at 09:25:14PM +0100, Michelle Konzack wrote:
 [EMAIL PROTECTED]

Das ist das Problem.

LANG wird von der bash nur interpretiert, wenn es vor dem
Start der bash schon gesezt ist. (LANG hat Einfluss auf
LC_COLLATE wenn dieses nicht gesetzt ist).

$ locale | fgrep COL
LC_COLLATE=C
$ export | grep LC_COL\|LANG
$ ls
A  B  C  a  b  c
$ ls [A-Z]*
A  B  C
# Soweit so gut
$ export LANG=en_US 
$ locale | fgrep LC_COL
LC_COLLATE=en_US
$ ls [A-Z]*
A  B  C
# ???
$ unset LANG; LC_COLLATE=en_US
$ ls [a-z]*
A  B  C  a  b  c
$ unset LC_COLLATE; export LANG=en_US
$ exec bash
$ ls [a-z]*
a  A  b  B  c  C

/GM


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: Eigenatiges BASH problem...

2005-03-24 Diskussionsfäden Sven Mueller
Bruno Hertz wrote on 24/03/2005 02:39:
Sven Mueller [EMAIL PROTECTED] writes:
Bruno Hertz wrote on 24/03/2005 00:01:
[stripped]
Also irgendwie ist das Verhalten der Bash bei mir schon sehr merkwürdig.
Voraussetzung: Verzeichnis mit leeren Dateien der Namen
a b c d e f g A B C D E F G
weiterhin: Skript (../t.sh vom fraglichen Verzeichnis aus) mit
folgendem Inhalt:
==
#!/bin/bash
unset LC_CTYPE LC_ALL LC_COLLATE
export LC_CTYPE=$1
printenv | grep LC
for i in `echo [A-C]`; do
echo $i
done
==
Dann noch in der aktuellen interaktiven Shell LC_COLLATE=de_DE
gesetzt. So, jetzt rufe ich das Skript auf:
# ../t.sh C
LC_COLLATE=C
A
b
B
c
C
Hä? Laut Deiner Aussage müsste das eigentlich nur A B und C (nach
LC_COLLATE=C) ausgeben. Wenn ich statt C de_DE oder us_US angebe, dann
bleibt die Ausgabe wie oben gezeigt.
Setze ich jetzt in meiner interaktiven Shell LC_COLLATE auf C (oder
lösche es samt der anderen LC_* Variablen), dann bleibt die Ausgabe
des Scripts wieder völlig unbeeindruckt vom Übergabeparameter,
abgesehen von der Ausgabe der LC_COLLATE-Zeile. Nur sieht es diesmal
so aus:
# ../t.sh de_DE
LC_COLLATE=de_DE
A
B
C
Hä? Laut Deiner Aussage müsste das Script eigentlich A b B c C
ausgeben, oder?
Vergiss mal das unset LC_ALL.
Das ändert nichts. LC_COLLATE hat Vorrang vor LC_ALLLC_CTYPE.
Um es richtig schön zu machen, hier noch zwei Beispiele:
# LC_COLLATE=C ../t.sh de_DE
LC_COLLATE=de_DE
A
B
C
# LC_COLLATE=de_DE ../t.sh C
LC_COLLATE=C
A
b
B
c
C
S.o.

Jetzt schlauer? Hint: Selbst die angeblichen Subshells sind nicht
wirklich eigene Instanzen der Bash sondern werden intern aufgelöst.
Schlauer, ja, in Bezug auf dich :) Erzähl doch nochmal genau was
'intern aufgelöst' heißt. Ich versteh das irgendwie nicht ... :)
Ganz einfach: Die Bash startet für Prozesse in `` keinen eigenen 
Prozess, wenn sondern erstellt nur einen neuen internen Context. 
Programme in `` werden natürlich ebenso gestartet, wie auch bei direktem 
Aufruf. Auch für Pseudo-Subshells wie ( ls; echo N ) wird kein eigener 
Shell-Prozess gestartet, sondern nur ein Thread bzw. neuer interner Context.

Deshalb macht es auch absolut keinen Unterschied für die Auflösung von 
Aufzählungen auf der Kommandozeile, ob Du vor einem for i in [A-C]; do 
echo $i; done nun LC_COLLATE ändert oder nicht.

Leg mal ein Verzeichnis an mit den Dateien a A b B (das reicht für die 
Demonstration) und mache nacheinander folgendes:

unset LC_ALL LC_CTYPE LC_COLLATE
bash # wird ohne locales-Spezifikationen im Environment gestartet
for i in [A-B]; do echo $i ; done
LC_COLLATE=de_DE
for i in [A-B]; do echo $i ; done
LC_COLLATE=C
for i in [A-B]; do echo $i ; done
exit
export LC_COLLATE=de_DE
bash # hat jetzt LC_COLLATE=de_DE gesetzt
for i in [A-B]; do echo $i ; done
LC_COLLATE=de_DE
for i in [A-B]; do echo $i ; done
LC_COLLATE=C
for i in [A-B]; do echo $i ; done
exit
export LC_COLLATE=C
bash # hat jetzt LC_COLLATE=C gesetzt
for i in [A-B]; do echo $i ; done
LC_COLLATE=de_DE
for i in [A-B]; do echo $i ; done
LC_COLLATE=C
for i in [A-B]; do echo $i ; done
exit


Und versuche zu verstehen, warum die Ausgaben so aussehen, wie sie aussehen.
die Shell die Pattern Expansion macht, ist also fraglich, was bei
ihrem Aufruf der Wert von LC_COLLATE war.
Und so habe ich das obige Script dazu gebracht, das zu tun, was ich wollte:
Nochmal:
Dafür, wie die Shell ein Pattern auflöst ist nicht der Wert von 
LC_COLLATE zum Zeitpunkt der Pattern-Expansion zuständig, sondern der 
Wert von LC_COLLATE (oder LC_ALL, wenn LC_COLLATE nicht gesetzt ist) zu 
dem Zeitpunkt, als die Shell aufgerufen wurde.
Die Bash initialisiert die locales-Klamotten nicht neu, wenn die 
Environment-Variablen geändert werden. Daher ist es ihr völlig schnuppe, 
wenn man die während der Laufzeit der Bash ändert. Andererseits sind die 
geänderten Werte für aufgerufene Programme (und dazu gehören 
Shellscripte) natürlich schon wichtig.

Alles klar?
Sicher.
Scheinbar nicht.
Meine Empfehlungen (in dieser Reihenfolge):
 man -S 7 locale
 http://www.opengroup.org/onlinepubs/007908799/xbd/locale.html
und schließlich die glibc Mailingliste.
Kenne ich, danke. Ich weiss, wie locales funktioniert. Du aber scheinbar 
nicht vollständig.

Ciao,
Sven
--
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)


Re: Eigenatiges BASH problem...

2005-03-24 Diskussionsfäden Gerhard Meier
On Thu, Mar 24, 2005 at 04:09:28PM +0100, Sven Mueller wrote:
 Die Bash initialisiert die locales-Klamotten nicht neu, wenn die 
 Environment-Variablen geändert werden. Daher ist es ihr völlig schnuppe, 
 wenn man die während der Laufzeit der Bash ändert. Andererseits sind die 

Nicht ganz:

bash$ ls
A  B  C  a  b  c
bash$ echo $LC_COLLATE $LANG

bash$ ls [a-z]*
a  b  c
bash$ export LC_COLLATE=en_US
bash$ ls [a-z]*
a  A  b  B  c  C
bash$ unset LC_COLLATE; export LANG=en_US
bash$ ls [a-z]*
a  b  c
bash$ exec bash
bash$ ls [a-z]*
a  A  b  B  c  C

LC_COLLATE beachtet sie sehrwohl, LANG hingegen nicht.

/GM


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: Eigenatiges BASH problem...

2005-03-24 Diskussionsfäden Bruno Hertz
Sven Mueller [EMAIL PROTECTED] writes:

 Vergiss mal das unset LC_ALL.
 Das ändert nichts. LC_COLLATE hat Vorrang vor LC_ALLLC_CTYPE.

Quatsch. Probier's mal aus. Teste mal (mit LANG != C/POSIX)

 LC_COLLATE=C
 echo *
 unset LC_ALL
 echo *

LC_CTYPE hat mit dem Thema übrigens gar nichts zu tun. Fängt ja gut an ...

 Ganz einfach: Die Bash startet für Prozesse in `` keinen eigenen
 Prozess, wenn sondern erstellt nur einen neuen internen
 Context. Programme in `` werden natürlich ebenso gestartet, wie auch
 bei direktem Aufruf. Auch für Pseudo-Subshells wie ( ls; echo N )
 wird kein eigener Shell-Prozess gestartet, sondern nur ein Thread
 bzw. neuer interner Context.

Selten so dämliches Zeug gelesen. Selbst für ein builtin wie echo
wird in backticks ein child process erzeugt, erst recht für binaries.
Lass mal deine Scripts mit strace -f laufen und schau dir mal die
clones/forks an. Weiss gar nicht warum ich auf solchen Blödsinn
überhaupt antworte ...


 Deshalb macht es auch absolut keinen Unterschied für die Auflösung von
 Aufzählungen auf der Kommandozeile, ob Du vor einem for i in [A-C];
 do echo $i; done nun LC_COLLATE ändert oder nicht.

 Leg mal ein Verzeichnis an mit den Dateien a A b B (das reicht für die
 Demonstration) und mache nacheinander folgendes:
 
 unset LC_ALL LC_CTYPE LC_COLLATE

Du hast noch immer nicht verstanden was 'unset LC_ALL' bewirkt. Meld'
dich wieder, wenn du einen Schimmer hast (kann allerdings nicht garantieren,
daß ich so lange warte).

 Und versuche zu verstehen, warum die Ausgaben so aussehen, wie sie aussehen.

Versuch's mal besser selbst. Ich räum' dir allerdings wenig Chancen ein.

 Kenne ich, danke. Ich weiss, wie locales funktioniert. Du aber
 scheinbar nicht vollständig.

Wie kann man nur so peinlich sein. Und das auch noch öffentlich, auf von
Suchmaschinen indizierten Listen ... kaum glaublich.



Re: Eigenatiges BASH problem...

2005-03-23 Diskussionsfäden Michelle Konzack
Am 2005-03-22 12:57:59, schrieb Bruno Hertz:
 On Tue, 2005-03-22 at 09:12 +0100, Michelle Konzack wrote:
 
   $HOME/devel/bash/[A-Z]*.tmp
  Beim Obigen sollte er aber nur Dateien anzeigen die mit den
  Großbuchstaben [A-Z] anfangen...
 
 Genau darüber reden wir die ganze Zeit, von den Buchstaben
 'A bis Z'. Wenn die collation order aber z.B.
 a A b B  z Z
 ist, sind das aber eben nicht nur Grossbuchstaben (sondern alle
 Gross- und Kleinbuchstaben von a bis z ausser 'klein a').

LC_COLLATE=C ls $HOME/devel/bash/[A-Z]*.tmp

zeigt aber ebenfals klein und gross Buchstaben an...

LC_COLLATE hat NICHTS mit RegExp zu tun, sonern nur mit der Reihenfolge

  Also ich mache jetzt zur Zeit ein
  
  LIST=`LC_COLLATE=C $HOME/devel/bash/*.tmp`
  
  womit ich sortiert die Dateien angezeigt bekomme,
  erst die mit Großbuchstaben anfangen, dann den Rest.
  
 
 Na also, Problem gelöst.

Nee, denn es ist nicht die Loesung zu 

ls $HOME/devel/bash/[A-Z]*.tmp

   Ich nehme daher an, dass du in der interaktiven Shell ein Setting hast,
   das eben nicht in Skripte exportiert wird (?)
  
  ???  Wie denn das ???
 
 Indem du LC_COLLATE (e.g. im profile) zwar setzt aber nicht exportierst.

Alles as ich verwende ist

   [EMAIL PROTECTED]
   [EMAIL PROTECTED]
[EMAIL PROTECTED]

was die die ganze Zeit auch funktioniert hat.

  Ich frage mich nur, warum mitten in einem
  Release wie WOODY sowas geändeet wird...
 
 Gute Frage. Wie gesagt handelt es sich um die glibc. Wenn also irgendwo
 ein 'Fehler' ist, liegt er dort.

Steht irgendwo im BTS und auch in der debian-devel

Greetings
Michelle

-- 
Linux-User #280138 with the Linux Counter, http://counter.li.org/ 
Michelle Konzack   Apt. 917  ICQ #328449886
   50, rue de Soultz MSM LinuxMichi
0033/3/8845235667100 Strasbourg/France   IRC #Debian (irc.icq.com)


signature.pgp
Description: Digital signature


Re: Eigenatiges BASH problem...

2005-03-23 Diskussionsfäden Mario Holbe
Michelle Konzack [EMAIL PROTECTED] wrote:
 LC_COLLATE=3DC ls $HOME/devel/bash/[A-Z]*.tmp
 zeigt aber ebenfals klein und gross Buchstaben an...

Ja. Weil es garnicht zum tragen kommt.

Wer expandiert Wildcards?
Wer bekommt das LC_COLLATE?
Genau.


regards
   Mario
-- 
Whenever you design a better fool-proof software,
the genetic pool will always design a better fool.


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: Eigenatiges BASH problem...

2005-03-23 Diskussionsfäden Bruno Hertz
Michelle Konzack [EMAIL PROTECTED] writes:

 Am 2005-03-22 12:57:59, schrieb Bruno Hertz:

 Genau darüber reden wir die ganze Zeit, von den Buchstaben
 'A bis Z'. Wenn die collation order aber z.B.
 a A b B  z Z
 ist, sind das aber eben nicht nur Grossbuchstaben (sondern alle
 Gross- und Kleinbuchstaben von a bis z ausser 'klein a').

 LC_COLLATE=C ls $HOME/devel/bash/[A-Z]*.tmp
 zeigt aber ebenfals klein und gross Buchstaben an...

Logisch. LC_COLLATE=C wird hier nur an ls exportiert, für die Shell
bleibt es aber unwirksam. D.h. hier greift immer noch dein locale setting.

Um auch für die Shell also  LC_COLLATE auf C zu setzen
 LC_COLLATE=C
 ls $HOME/devel/bash/[A-Z]*.tmp

Um es auch für Subshells/geforkte Prozesse wirksam zu machen
 export LC_COLLATE=C

 LC_COLLATE hat NICHTS mit RegExp zu tun, sonern nur mit der Reihenfolge

Wie du auf RegExp kommst ist mir ein Rätsel. Hat das irgendjemand erwähnt?
Und brüllen mußt du auch nicht unbedingt ...

 Na also, Problem gelöst.

 Nee, denn es ist nicht die Loesung zu 

 ls $HOME/devel/bash/[A-Z]*.tmp


Ich könnt's nochmal erklären, spare es mir aber. Es ist wirklich alles gesagt.

 Alles as ich verwende ist

[EMAIL PROTECTED]
[EMAIL PROTECTED]
 [EMAIL PROTECTED]

Dann poste auch mal die Ausgabe von locale.

 Gute Frage. Wie gesagt handelt es sich um die glibc. Wenn also irgendwo
 ein 'Fehler' ist, liegt er dort.

 Steht irgendwo im BTS und auch in der debian-devel

Stimmt. Bei all den Bug Reports schien sich aber bisher zu bewahrheiten, dass
es kein Bug war sondern eben Unverständnis der collate Thematik. Ich sehe kein
offenes/relevantes Bug Listing zu diesem Thema.




Re: Eigenatiges BASH problem...

2005-03-23 Diskussionsfäden Michelle Konzack
Am 2005-03-23 21:07:53, schrieb Bruno Hertz:

 Logisch. LC_COLLATE=C wird hier nur an ls exportiert, für die Shell
 bleibt es aber unwirksam. D.h. hier greift immer noch dein locale setting.
 
 Um auch für die Shell also  LC_COLLATE auf C zu setzen
  LC_COLLATE=C
  ls $HOME/devel/bash/[A-Z]*.tmp

Hä ? Für was ?

Ein 'ls $HOME/devel/bash/[A-Z]*.tmp' benötigt kein LC_COLLATE.

Das LC_COLLATE ist nur bei 'ls $HOME/devel/bash/*.tmp' witksam.

 Um es auch für Subshells/geforkte Prozesse wirksam zu machen
  export LC_COLLATE=C

Das will ich aber nicht...

LC_COLLATE=de_DE

So ist es seit 03/1999 und hat funktioniert.

  LC_COLLATE hat NICHTS mit RegExp zu tun, sonern nur mit der Reihenfolge
 
 Wie du auf RegExp kommst ist mir ein Rätsel. Hat das irgendjemand erwähnt?
 Und brüllen mußt du auch nicht unbedingt ...

Esa geht darum das die BASH [A-Z]* expandiert,
aber ein SCRIPT in der gleichen Shell es ignoriert.

  Na also, Problem gelöst.
 
  Nee, denn es ist nicht die Loesung zu 
 
  ls $HOME/devel/bash/[A-Z]*.tmp
 
 
 Ich könnt's nochmal erklären, spare es mir aber. Es ist wirklich alles gesagt.

Ihr redet nur con LC_COLLATE was nichts damit zu tun hat.
Ich habe erste heute vormittag eine WOODY Maschine von den 3.0r0
CD's installiert und mein Script funktioniert...

Nach dem Update auf r4 funktionierren keine BACKUP-Scripts und
jede menge andere Scrips nicht mehr.

Soweit ich das aus GOOLGE erfahren habe hängt das mit dem Security
update der libc6 zusammen... da ist was kaputt gegangen.

  Alles as ich verwende ist
 
 [EMAIL PROTECTED]
 [EMAIL PROTECTED]
  [EMAIL PROTECTED]
 
 Dann poste auch mal die Ausgabe von locale.

[EMAIL PROTECTED]
LC_CTYPE=[EMAIL PROTECTED]
LC_NUMERIC=[EMAIL PROTECTED]
LC_TIME=[EMAIL PROTECTED]
LC_COLLATE=[EMAIL PROTECTED]
LC_MONETARY=[EMAIL PROTECTED]
[EMAIL PROTECTED]
LC_PAPER=[EMAIL PROTECTED]
LC_NAME=[EMAIL PROTECTED]
LC_ADDRESS=[EMAIL PROTECTED]
LC_TELEPHONE=[EMAIL PROTECTED]
LC_MEASUREMENT=[EMAIL PROTECTED]
LC_IDENTIFICATION=[EMAIL PROTECTED]
LC_ALL=

 Stimmt. Bei all den Bug Reports schien sich aber bisher zu bewahrheiten, dass
 es kein Bug war sondern eben Unverständnis der collate Thematik. Ich sehe kein
 offenes/relevantes Bug Listing zu diesem Thema.

Greetings
Michelle

-- 
Linux-User #280138 with the Linux Counter, http://counter.li.org/ 
Michelle Konzack   Apt. 917  ICQ #328449886
   50, rue de Soultz MSM LinuxMichi
0033/3/8845235667100 Strasbourg/France   IRC #Debian (irc.icq.com)


signature.pgp
Description: Digital signature


Re: Eigenatiges BASH problem...

2005-03-23 Diskussionsfäden Bruno Hertz
Michelle Konzack [EMAIL PROTECTED] writes:

 Am 2005-03-23 21:07:53, schrieb Bruno Hertz:

 Um auch für die Shell also  LC_COLLATE auf C zu setzen
  LC_COLLATE=C
  ls $HOME/devel/bash/[A-Z]*.tmp

 Hä ? Für was ?

Stimmt, war falsch. Richtig:
 export LC_COLLATE=C
 ls $HOME/devel/bash/[A-Z]*.tmp

 Ein 'ls $HOME/devel/bash/[A-Z]*.tmp' benötigt kein LC_COLLATE.

Inkorrekt. Es braucht es sogar zweimal:

(1) $HOME/devel/bash/[A-Z]*.tmp wird von der Shell expandiert.
Die Reihenfolge wird dabei bestimmt von LC_COLLATE. man bash,
'path expansion' und 'range expression'

(2) ls erhält die expandierte Parameterliste und sortiert jetzt
aber nochmal, wieder gemäß LC_COLLATE. Deshalb oben das export.
man strcoll (wird von ls verwendet)

 Das LC_COLLATE ist nur bei 'ls $HOME/devel/bash/*.tmp' witksam.

Leider falsch. man bash.

 Um es auch für Subshells/geforkte Prozesse wirksam zu machen
  export LC_COLLATE=C

 Das will ich aber nicht...

 LC_COLLATE=de_DE

Das wird nicht gehen. Entgegen eines vorherigen Postings von mir (hatte
einen Fehler gemacht weil bei mir de_DE überhaupt nicht installiert war,
deshalb hatte ein entsprechendes collate setting auch keine Auswirkung)
ist die collation order für de_DE die gleiche wie bei en_US, nämlich
 a A b B  z Z

D.h. eine range expression der Form [A-C] enthält die Buchstaben
 A b B c C
d.h. eben nicht nur Grossbuchstaben, und gemäß dieser Reihenfolge wird auch
sortiert.

Du kannst aber [ABCDEFGHIJKLMNOPQRSTUVWXYZ] schreiben, das geht dann
auch mit de_DE :)

Die collation order ist für die country locales vor einiger Zeit mal umgestellt
worden (sie war vorher wie ASCII, i.e. entsprechend LC_COLLATE=C). Das ist aber
schon Jahre her, meine ich ...

 Wie du auf RegExp kommst ist mir ein Rätsel. Hat das irgendjemand erwähnt?
 Und brüllen mußt du auch nicht unbedingt ...

 Esa geht darum das die BASH [A-Z]* expandiert,
 aber ein SCRIPT in der gleichen Shell es ignoriert.

Du meinst daß das Skript anders expandiert als die Shell. Mit regexps hat
das aber nichts zu tun, und das hat auch niemand behauptet.

 Ihr redet nur con LC_COLLATE was nichts damit zu tun hat.
 Ich habe erste heute vormittag eine WOODY Maschine von den 3.0r0
 CD's installiert und mein Script funktioniert...

Unser Thema war die Sortierreihenfolge von Ausdrücken wie
 ls /irgendeinpfad/[A-Z]*.irgendwas
und welche Buchstaben (klein,groß) in solchen range expressions
vorkommen. Und das ist sowohl was die shell expansion als auch die
Sortierung von ls angeht bestimmt von LC_COLLATE.

Probier's dochmal mit einem Testskript der Form

 LC_COLLATE=$1
 echo $LC_COLLATE
 # shell expansion gemäß $1
 echo /irgendeinpfad/[A-Z]*.irgendwas
 # shell expansion und sortierung von ls; da LC_COLLATE nicht
 # exportiert wurde, greift $1 hier noch nicht
 ls /irgendeinpfad/[A-Z]*.irgendwas
 export LC_COLLATE
 # shell expansion gemäß $1
 echo /irgendeinpfad/[A-Z]*.irgendwas
 # ausgabe von ls sollte mit vorherigem echo korrespondieren
 # da LC_COLLATE exportiert wurde
 ls   /irgendeinpfad/[A-Z]*.irgendwas

und ruf es mit skript.sh C resp. de_DE und wasnoch auf. Dann wird
die Sache vielleicht klarer.

 Nach dem Update auf r4 funktionierren keine BACKUP-Scripts und
 jede menge andere Scrips nicht mehr.

Schlimm.

 Soweit ich das aus GOOLGE erfahren habe hängt das mit dem Security
 update der libc6 zusammen... da ist was kaputt gegangen.

Kann sein. Wie gesagt habe ich kein Woody, nur Sarge. Letztres ist
aber up-to-date, und die Dinge funktionieren hier genau so wie von
mir beschrieben.

 LC_COLLATE=[EMAIL PROTECTED]

OK, das sollte dann aber auch für die interaktive Shell gelten. Wenn
die mit diesem setting [A-Z] in A B C ... Z expandiert, ist etwas komisch.
Sie sollte es in a A b B ... z Z expandieren, interaktiv ebenso wie
per Skript.



Re: Eigenatiges BASH problem...

2005-03-23 Diskussionsfäden Michelle Konzack
Am 2005-03-23 22:38:19, schrieb Bruno Hertz:

 Inkorrekt. Es braucht es sogar zweimal:
 
 (1) $HOME/devel/bash/[A-Z]*.tmp wird von der Shell expandiert.
 Die Reihenfolge wird dabei bestimmt von LC_COLLATE. man bash,
 'path expansion' und 'range expression'

Was bedeutet das GNU/Linux plötzlich Case-Insensitive geworden ist.
denn bei mir sind A-Z GROSSbuchstaben und a-z kleinBUCHSTABEN.

 (2) ls erhält die expandierte Parameterliste und sortiert jetzt
 aber nochmal, wieder gemäß LC_COLLATE. Deshalb oben das export.
 man strcoll (wird von ls verwendet)

Aber die expandierte Liste ist enen nur [A-Z]* .
Also woher kommt dann [a-z]* ?

  Das LC_COLLATE ist nur bei 'ls $HOME/devel/bash/*.tmp' witksam.
 
 Leider falsch. man bash.

Dann darf es am BASH Prompt ja auch nicht funktionieren,
was es aber tut.

  Um es auch für Subshells/geforkte Prozesse wirksam zu machen
   export LC_COLLATE=C
 
  Das will ich aber nicht...
 
  LC_COLLATE=de_DE
 
 Das wird nicht gehen. Entgegen eines vorherigen Postings von mir (hatte

Das wiederspricht dann aber das am BASH prompt es auch funktiniert.

wenn ich z.b. 

for i in `ls -d` ; do ls $i/[A-Z]* ; echo ; done
  ^   
Sub-SHELL  Sub-SHELL

aufrufe funktioniert es einwqndfrei, wogegen Deine Erklärung nicht
standhällt.

 einen Fehler gemacht weil bei mir de_DE überhaupt nicht installiert war,
 deshalb hatte ein entsprechendes collate setting auch keine Auswirkung)
 ist die collation order für de_DE die gleiche wie bei en_US, nämlich
  a A b B  z Z
 
 D.h. eine range expression der Form [A-C] enthält die Buchstaben
  A b B c C

Ich habe innerhalb des Scripts locale aufgerufen und es liefert die
gleiche Antwort wie am BASH prompt.

Wenn am BASH Prompt 'ls [A-Z]*' funktioniert und im BASH Script die
gleichen locale vorhanden sind, muß der Fehler noch woanderst liegen.

 Die collation order ist für die country locales vor einiger Zeit mal 
 umgestellt
 worden (sie war vorher wie ASCII, i.e. entsprechend LC_COLLATE=C). Das ist 
 aber
 schon Jahre her, meine ich ...

Dann wurde locale mit der libc6 aud WOODY r1 geändert.

  Ihr redet nur con LC_COLLATE was nichts damit zu tun hat.
  Ich habe erste heute vormittag eine WOODY Maschine von den 3.0r0
  CD's installiert und mein Script funktioniert...
 
 Unser Thema war die Sortierreihenfolge von Ausdrücken wie
  ls /irgendeinpfad/[A-Z]*.irgendwas
 und welche Buchstaben (klein,groß) in solchen range expressions
 vorkommen. Und das ist sowohl was die shell expansion als auch die
 Sortierung von ls angeht bestimmt von LC_COLLATE.

Ich gebe ja an das ich nur Dateien die mit GROSS Buchstaben anfangen
haben will.  LC_COLLATE hat aber mit der Sortierreihenfolge zu tun.

(hat mir jemand von der debian-devel klar gemacht)

 Probier's dochmal mit einem Testskript der Form
 
  LC_COLLATE=$1
  echo $LC_COLLATE
  # shell expansion gemäß $1
  echo /irgendeinpfad/[A-Z]*.irgendwas
  # shell expansion und sortierung von ls; da LC_COLLATE nicht
  # exportiert wurde, greift $1 hier noch nicht
  ls /irgendeinpfad/[A-Z]*.irgendwas
  export LC_COLLATE
  # shell expansion gemäß $1
  echo /irgendeinpfad/[A-Z]*.irgendwas
  # ausgabe von ls sollte mit vorherigem echo korrespondieren
  # da LC_COLLATE exportiert wurde
  ls   /irgendeinpfad/[A-Z]*.irgendwas
 
 und ruf es mit skript.sh C resp. de_DE und wasnoch auf. Dann wird
 die Sache vielleicht klarer.

  __( command 'skript.sh de_DE' )___
 /
| de_DE
| /home/michelle.konzack/devel/bash/[A-Z]*.tmp
| /home/michelle.konzack/devel/bash/BASE.tmp
| /home/michelle.konzack/devel/bash/help_version.tmp
| /home/michelle.konzack/devel/bash/pid.tmp
| /home/michelle.konzack/devel/bash/prog_parts_by_option.tmp
| /home/michelle.konzack/devel/bash/read_config.tmp
| /home/michelle.konzack/devel/bash/SKEL_with_help_and_pid.tmp
| /home/michelle.konzack/devel/bash/SKEL_with_help.tmp
| /home/michelle.konzack/devel/bash/SKEL_with_pid.tmp
| /home/michelle.konzack/devel/bash/td.tmp
| /home/michelle.konzack/devel/bash/[A-Z]*.tmp
| /home/michelle.konzack/devel/bash/BASE.tmp
| /home/michelle.konzack/devel/bash/SKEL_with_help_and_pid.tmp
| /home/michelle.konzack/devel/bash/SKEL_with_help.tmp
| /home/michelle.konzack/devel/bash/SKEL_with_pid.tmp
| /home/michelle.konzack/devel/bash/help_version.tmp
| /home/michelle.konzack/devel/bash/pid.tmp
| /home/michelle.konzack/devel/bash/prog_parts_by_option.tmp
| /home/michelle.konzack/devel/bash/read_config.tmp
| /home/michelle.konzack/devel/bash/td.tmp
 \__

Das ist aber nicht das was ich will, denn ich habe ja [A-Z]* angegeben
und nicht [A-Za-z]*.  Im Script wird einfach GROS und klein Schreibung
ignoriert.  LC_COLLATE sortiert zwar richtig, aber 'ls' zeigt falsch an.

 Kann sein. Wie gesagt habe ich kein Woody, nur Sarge. Letztres ist
 aber up-to-date, und die Dinge funktionieren hier genau so wie von
 mir beschrieben.

Also ich 

Re: Eigenatiges BASH problem...

2005-03-23 Diskussionsfäden Bruno Hertz
Michelle Konzack [EMAIL PROTECTED] writes:

 Am 2005-03-23 22:38:19, schrieb Bruno Hertz:

 (1) $HOME/devel/bash/[A-Z]*.tmp wird von der Shell expandiert.
 Die Reihenfolge wird dabei bestimmt von LC_COLLATE. man bash,
 'path expansion' und 'range expression'

 Was bedeutet das GNU/Linux plötzlich Case-Insensitive geworden ist.
 denn bei mir sind A-Z GROSSbuchstaben und a-z kleinBUCHSTABEN.

S.u.


 (2) ls erhält die expandierte Parameterliste und sortiert jetzt
 aber nochmal, wieder gemäß LC_COLLATE. Deshalb oben das export.
 man strcoll (wird von ls verwendet)

 Aber die expandierte Liste ist enen nur [A-Z]* .
 Also woher kommt dann [a-z]* ?

Unter de_DE ist [A-Z] = A b B c C ... z Z

 Dann darf es am BASH Prompt ja auch nicht funktionieren,
 was es aber tut.

Skript und interaktive Shell sollten mit demselben LC_COLLATE gleich
arbeiten, richtig. Wenn es das bei dir nicht tut, hast du (noch) ein
anderes Problem. Bei mir funktioniert es einheitlich.

  LC_COLLATE=de_DE
 
 Das wird nicht gehen. Entgegen eines vorherigen Postings von mir (hatte

 Das wiederspricht dann aber das am BASH prompt es auch funktiniert.

 wenn ich z.b. 

 for i in `ls -d` ; do ls $i/[A-Z]* ; echo ; done
   ^   
 Sub-SHELL  Sub-SHELL

 aufrufe funktioniert es einwqndfrei, wogegen Deine Erklärung nicht
 standhällt.

Kann ich nichts zu sagen ohne Verzeichnisinhalte und output.

 Ich habe innerhalb des Scripts locale aufgerufen und es liefert die
 gleiche Antwort wie am BASH prompt.

 Wenn am BASH Prompt 'ls [A-Z]*' funktioniert und im BASH Script die
 gleichen locale vorhanden sind, muß der Fehler noch woanderst liegen.

Kann sein.

 Ich gebe ja an das ich nur Dateien die mit GROSS Buchstaben anfangen
 haben will.  LC_COLLATE hat aber mit der Sortierreihenfolge zu tun.

 (hat mir jemand von der debian-devel klar gemacht)

Hier versucht dir auch einer was klar zu machen, und es gestaltet sich
sehr mühsam. Deine Aussage, du gäbest an 'nur GROSS Buchstaben' haben zu
wollen, ist verkehrt. Unter de_DE heißt [A-Z] eben nicht 'nur GROSS
Buchstaben', sondern alle Buchstaben die gemäß der wirksamen Sortierreihenfolge
in dem Range A bis Z enthalten sind. Wenn die Sortierung aber eben
a A b B ... z Z ist, sind in dem Range auch alle Kleinbuchstaben außer
(klein) a enthalten.

   __( command 'skript.sh de_DE' )___
  /
 | de_DE
 | /home/michelle.konzack/devel/bash/[A-Z]*.tmp

Wieso wird das nicht expandiert? Hast du quotes eingefügt?

 | /home/michelle.konzack/devel/bash/BASE.tmp
 | /home/michelle.konzack/devel/bash/help_version.tmp
 | /home/michelle.konzack/devel/bash/pid.tmp
 | /home/michelle.konzack/devel/bash/prog_parts_by_option.tmp
 | /home/michelle.konzack/devel/bash/read_config.tmp
 | /home/michelle.konzack/devel/bash/SKEL_with_help_and_pid.tmp
 | /home/michelle.konzack/devel/bash/SKEL_with_help.tmp
 | /home/michelle.konzack/devel/bash/SKEL_with_pid.tmp
 | /home/michelle.konzack/devel/bash/td.tmp

Wie erwartet unter de_DE (für ls greift hier deine default
locale).

 | /home/michelle.konzack/devel/bash/[A-Z]*.tmp

Wieso wird das nicht expandiert? So können wir es nicht mit der
Ausgabe von ls vergleichen.

 | /home/michelle.konzack/devel/bash/BASE.tmp
 | /home/michelle.konzack/devel/bash/SKEL_with_help_and_pid.tmp
 | /home/michelle.konzack/devel/bash/SKEL_with_help.tmp
 | /home/michelle.konzack/devel/bash/SKEL_with_pid.tmp
 | /home/michelle.konzack/devel/bash/help_version.tmp
 | /home/michelle.konzack/devel/bash/pid.tmp
 | /home/michelle.konzack/devel/bash/prog_parts_by_option.tmp
 | /home/michelle.konzack/devel/bash/read_config.tmp
 | /home/michelle.konzack/devel/bash/td.tmp

Das sollte nicht sein, da du das Skript mit de_DE aufgerufen hast,
was sowieso deiner default locale entspricht. Ein export macht also
gar keinen Unterschied. Der Range wird zwar noch richtig von der Shell
expandiert (inklusive Kleinbuchstaben), aber ls sortiert gemäß C
locale. Ist dein ls veraltet (strcmp statt strcoll für Vergleiche) ?
Aber dann sollte es oben ja das gleiche sein, da du ja mit de_DE
eigentlich sowieso nichts änderst. Sehr undurchsichtig. Hast du ein
LC_COLLATE=C vor das zweite ls gesetzt? Im übrigen wäre der Vergleich
mit C ja sowieso das interessante gewesen ...

  \__

 Das ist aber nicht das was ich will, denn ich habe ja [A-Z]* angegeben
 und nicht [A-Za-z]*.  Im Script wird einfach GROS und klein Schreibung
 ignoriert.  LC_COLLATE sortiert zwar richtig, aber 'ls' zeigt falsch an.

Ich rede über die Expansion von ranges jetzt nicht nochmal. Wenn du jetzt
noch nicht verstanden hast daß [A-Z] nicht automatisch 'nur Großbuchstaben'
heißt kann ich auch nichts mehr dazu sagen.

 Also ich habe hier eine Develststion mit POTATO, WOODY, SARGE und SID
 chroots... 

 Ich habe überall den gleichen Fehler... (i386 + amd64)

 Auf 68k und powerpc habe ich das ergebnis wie bei Dir.

Wenn der 

Re: Eigenatiges BASH problem...

2005-03-23 Diskussionsfäden Sven Mueller
Bruno Hertz wrote on 24/03/2005 00:01:
[stripped]
Also irgendwie ist das Verhalten der Bash bei mir schon sehr merkwürdig.
Voraussetzung: Verzeichnis mit leeren Dateien der Namen
a b c d e f g A B C D E F G
weiterhin: Skript (../t.sh vom fraglichen Verzeichnis aus) mit folgendem 
Inhalt:

==
#!/bin/bash
unset LC_CTYPE LC_ALL LC_COLLATE
export LC_CTYPE=$1
printenv | grep LC
for i in `echo [A-C]`; do
echo $i
done
==
Dann noch in der aktuellen interaktiven Shell LC_COLLATE=de_DE gesetzt. 
So, jetzt rufe ich das Skript auf:

# ../t.sh C
LC_COLLATE=C
A
b
B
c
C
Hä? Laut Deiner Aussage müsste das eigentlich nur A B und C (nach 
LC_COLLATE=C) ausgeben. Wenn ich statt C de_DE oder us_US angebe, dann 
bleibt die Ausgabe wie oben gezeigt.

Setze ich jetzt in meiner interaktiven Shell LC_COLLATE auf C (oder 
lösche es samt der anderen LC_* Variablen), dann bleibt die Ausgabe des 
Scripts wieder völlig unbeeindruckt vom Übergabeparameter, abgesehen von 
der Ausgabe der LC_COLLATE-Zeile. Nur sieht es diesmal so aus:

# ../t.sh de_DE
LC_COLLATE=de_DE
A
B
C
Hä? Laut Deiner Aussage müsste das Script eigentlich A b B c C ausgeben, 
oder?

Um es richtig schön zu machen, hier noch zwei Beispiele:
# LC_COLLATE=C ../t.sh de_DE
LC_COLLATE=de_DE
A
B
C
# LC_COLLATE=de_DE ../t.sh C
LC_COLLATE=C
A
b
B
c
C
Jetzt schlauer? Hint: Selbst die angeblichen Subshells sind nicht 
wirklich eigene Instanzen der Bash sondern werden intern aufgelöst. Da 
die Shell die Pattern Expansion macht, ist also fraglich, was bei ihrem 
Aufruf der Wert von LC_COLLATE war.

Und so habe ich das obige Script dazu gebracht, das zu tun, was ich wollte:
==
#!/bin/bash
LOOPED=0
if [ $1 = -loop ]; then
LOOPED=1
shift
fi
unset LC_CTYPE LC_ALL LC_COLLATE
export LC_COLLATE=$1
if [ $LOOPED = 0 ]; then
printenv | grep LC
$0 -loop $@
else
echo looped:
printenv | grep LC
for i in [A-C]; do
echo $i
done
fi
==
Alles klar?
Ciao,
Sven
--
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)


Re: Eigenatiges BASH problem...

2005-03-23 Diskussionsfäden Bruno Hertz
Sven Mueller [EMAIL PROTECTED] writes:

 Bruno Hertz wrote on 24/03/2005 00:01:

 [stripped]

 Also irgendwie ist das Verhalten der Bash bei mir schon sehr merkwürdig.

 Voraussetzung: Verzeichnis mit leeren Dateien der Namen
 a b c d e f g A B C D E F G

 weiterhin: Skript (../t.sh vom fraglichen Verzeichnis aus) mit
 folgendem Inhalt:

 ==
 #!/bin/bash
 unset LC_CTYPE LC_ALL LC_COLLATE
 export LC_CTYPE=$1
 printenv | grep LC
 for i in `echo [A-C]`; do
   echo $i
 done
 ==

 Dann noch in der aktuellen interaktiven Shell LC_COLLATE=de_DE
 gesetzt. So, jetzt rufe ich das Skript auf:

 # ../t.sh C
 LC_COLLATE=C
 A
 b
 B
 c
 C

 Hä? Laut Deiner Aussage müsste das eigentlich nur A B und C (nach
 LC_COLLATE=C) ausgeben. Wenn ich statt C de_DE oder us_US angebe, dann
 bleibt die Ausgabe wie oben gezeigt.

 Setze ich jetzt in meiner interaktiven Shell LC_COLLATE auf C (oder
 lösche es samt der anderen LC_* Variablen), dann bleibt die Ausgabe
 des Scripts wieder völlig unbeeindruckt vom Übergabeparameter,
 abgesehen von der Ausgabe der LC_COLLATE-Zeile. Nur sieht es diesmal
 so aus:

 # ../t.sh de_DE
 LC_COLLATE=de_DE
 A
 B
 C

 Hä? Laut Deiner Aussage müsste das Script eigentlich A b B c C
 ausgeben, oder?

Vergiss mal das unset LC_ALL.


 Um es richtig schön zu machen, hier noch zwei Beispiele:

 # LC_COLLATE=C ../t.sh de_DE
 LC_COLLATE=de_DE
 A
 B
 C

 # LC_COLLATE=de_DE ../t.sh C
 LC_COLLATE=C
 A
 b
 B
 c
 C


S.o.

 Jetzt schlauer? Hint: Selbst die angeblichen Subshells sind nicht
 wirklich eigene Instanzen der Bash sondern werden intern aufgelöst.

Schlauer, ja, in Bezug auf dich :) Erzähl doch nochmal genau was
'intern aufgelöst' heißt. Ich versteh das irgendwie nicht ... :)

 die Shell die Pattern Expansion macht, ist also fraglich, was bei
 ihrem Aufruf der Wert von LC_COLLATE war.

 Und so habe ich das obige Script dazu gebracht, das zu tun, was ich wollte:

 ==
 #!/bin/bash

 LOOPED=0
 if [ $1 = -loop ]; then
   LOOPED=1
   shift
 fi

 unset LC_CTYPE LC_ALL LC_COLLATE
 export LC_COLLATE=$1

 if [ $LOOPED = 0 ]; then
   printenv | grep LC
   $0 -loop $@
 else  
   echo looped:
   printenv | grep LC
   for i in [A-C]; do
   echo $i
   done
 fi
 ==

 Alles klar?

Sicher.

Meine Empfehlungen (in dieser Reihenfolge):

 man -S 7 locale
 http://www.opengroup.org/onlinepubs/007908799/xbd/locale.html

und schließlich die glibc Mailingliste.




Re: Eigenatiges BASH problem...

2005-03-23 Diskussionsfäden Bruno Hertz

Noch'n Bonus aus /usr/share/doc/bash/COMPAT.gz :

---

13. The behavior of range specificiers within bracket matching expressions
in the pattern matcher (e.g., [A-Z]) depends on the current locale,
specifically the value of the LC_COLLATE environment variable.  Setting
this variable to C or POSIX will result in the traditional ASCII behavior
for range comparisons.  If the locale is set to something else, e.g.,
en_US (specified by the LANG or LC_ALL variables), collation order is
locale-dependent.  For example, the en_US locale sorts the upper and
lower case letters like this:

AaBb...Zz

so a range specification like [A-Z] will match every letter except `z'.
Other locales collate like

aAbBcC...zZ

which means that [A-Z] matches every letter except `a'.

The portable way to specify upper case letters is [:upper:] instead of
A-Z; lower case may be specified as [:lower:] instead of a-z.

Look at the manual pages for setlocale(3), strcoll(3), and, if it is
present, locale(1).

You can find your current locale information by running locale(1):

caleb.ins.cwru.edu(2)$ locale
LANG=en_US
LC_CTYPE=en_US
LC_NUMERIC=en_US
LC_TIME=en_US
LC_COLLATE=en_US
LC_MONETARY=en_US
LC_MESSAGES=en_US
LC_ALL=en_US

My advice is to put

export LC_COLLATE=C

into /etc/profile and inspect any shell scripts run from cron for
constructs like [A-Z].  This will prevent things like

rm [A-Z]*

from removing every file in the current directory except those beginning
with `z' and still allow individual users to change the collation order.
Users may put the above command into their own profiles as well, of course.

---

Klarer geht's dann wohl kaum (und ich hätt' mir nicht den Mund fusselig
reden müssen - naja, für's nächste mal ...)



Re: Eigenatiges BASH problem...

2005-03-22 Diskussionsfäden Michelle Konzack
Am 2005-03-22 01:48:34, schrieb Bruno Hertz:
 On Tue, 2005-03-22 at 01:28 +0100, Michelle Konzack wrote:
 
  Fehlt nur noch das Problem, warum
  
  $HOME/devel/bash/[A-Z]*.tmp
  
  in der BASH funktioniert, während in Scripten alle Dateien
  gemischt werden, also [A-Z] einfach ignoriert wird.
 
 Also, ich habe LC_COLLATE=en_US, und bei mir werden auch auf der bash
 Kommandozeile Gross- und Kleinschreibung in 'range expressions' nicht

Beim Obigen sollte er aber nur Dateien anzeigen die mit den
Großbuchstaben [A-Z] anfangen...

Unter SLINK, POTATO und WOODY r0 funktioniert es...
Genaugenommen über 30 meiner alten Scripte.
Seit r1 oder r2 habe ich nur noch Fehlermeldungen.

Ich mußte feststellen das bei WOODY seit release 0
einiges kaputt gegangen ist...

 unterschieden. Ich habe also auch in diesem Fall das gleiche Verhalten,
 wie du es nur für Skripte beobachtest.

Also ich mache jetzt zur Zeit ein

LIST=`LC_COLLATE=C $HOME/devel/bash/*.tmp`

womit ich sortiert die Dateien angezeigt bekomme,
erst die mit Großbuchstaben anfangen, dann den Rest.

 Ich nehme daher an, dass du in der interaktiven Shell ein Setting hast,
 das eben nicht in Skripte exportiert wird (?)

???  Wie denn das ???

In meiner Loginshell habeich nichts besonderes,
was das verhalten der BASH verändert.

 Die Geschichte ist insgesamt nicht ganz durchsichtig, insbesondere was
 die glibc Implementierung angeht. Generell arbeite ich daher lieber mit
 character classes wie [[:upper:]].

Genau, denn ich hatte da was im BTS gelesen das
da etwas in WOODY r1/2 verändert wurde..

Seitdem habe ich mit unzähligen Scripten Probleme.

 Hier ist ein Thread, in dem das Thema (weiter unten, ab Posting 9)
 diskutiert wird
 http://groups.google.ch/groups?hl=delr=threadm=9qd9ot0e1b4cpboupq7p78ch9o4ub6vcb1%404ax.com
 inklusive Beschimpfungen, aber leider auch nicht erschöpfend :)

Mal sehn...

 Für letztendlichen Durchblick ist wohl das Verständnis von
 /usr/share/i18n/locales/iso14651_t1
 nötig ...

Ich frage mich nur, warum mitten in einem
Release wie WOODY sowas geändeet wird...

Greetings
Michelle

-- 
Linux-User #280138 with the Linux Counter, http://counter.li.org/ 
Michelle Konzack   Apt. 917  ICQ #328449886
   50, rue de Soultz MSM LinuxMichi
0033/3/8845235667100 Strasbourg/France   IRC #Debian (irc.icq.com)


signature.pgp
Description: Digital signature


Re: Eigenatiges BASH problem...

2005-03-22 Diskussionsfäden Michelle Konzack
Am 2005-03-22 02:05:31, schrieb Gerhard Meier:

 Das liegt daran, dass die bash imho kaputt ist. Siehe
 
   http://www.linuxhaters.de/Shell

Werd ich mir ansehen...

 D.h sie verhaelt sich nur den Umgebungsvariablen entsprechend,
 wenn die Umgebungsvariablen beim Start der Bash schon gesetzt
 sind.

Ähm, wenn Du das Script in der BASH startest haste die
Umgebungsvariablen. Hat ja bis vor 2 Jahren funktioniert...

Sprich, die Scripte funktionierten unte WOODY r0 (und ev. r1)

 /GM

Greetings
Michelle

-- 
Linux-User #280138 with the Linux Counter, http://counter.li.org/ 
Michelle Konzack   Apt. 917  ICQ #328449886
   50, rue de Soultz MSM LinuxMichi
0033/3/8845235667100 Strasbourg/France   IRC #Debian (irc.icq.com)


signature.pgp
Description: Digital signature


Re: Eigenatiges BASH problem...

2005-03-22 Diskussionsfäden Michelle Konzack
Am 2005-03-22 02:45:46, schrieb Bruno Hertz:

 Kann ich nicht bestätigen:
 
 [EMAIL PROTECTED]:~/tmp$ ls -l
 total 0
 -rw-r--r--  1 bhertz bhertz 0 2005-03-22 02:40 a
 -rw-r--r--  1 bhertz bhertz 0 2005-03-22 02:40 A
 -rw-r--r--  1 bhertz bhertz 0 2005-03-22 02:40 z
 -rw-r--r--  1 bhertz bhertz 0 2005-03-22 02:40 Z
 [EMAIL PROTECTED]:~/tmp$ locale | grep COLLATE
 LC_COLLATE=en_US

Mach hier de_DE

 [EMAIL PROTECTED]:~/tmp$ ls [A-Z]
 A  z  Z

Dann bekommste hier:A  Z

 [EMAIL PROTECTED]:~/tmp$ ls [a-z]
 a  A  z

genauso wie hier:   a  z

 [EMAIL PROTECTED]:~/tmp$ export LC_COLLATE=C

Das habe ich auch schon exportiert

 [EMAIL PROTECTED]:~/tmp$ ls [A-Z]
 A  Z
 [EMAIL PROTECTED]:~/tmp$ ls [a-z]
 a  z

und ein:ls *
liefert:A  Z  a  z

Also der Effect den ich ursprünglich erreichen wollte.

Greetings
Michelle

-- 
Linux-User #280138 with the Linux Counter, http://counter.li.org/ 
Michelle Konzack   Apt. 917  ICQ #328449886
   50, rue de Soultz MSM LinuxMichi
0033/3/8845235667100 Strasbourg/France   IRC #Debian (irc.icq.com)


signature.pgp
Description: Digital signature


Re: Eigenatiges BASH problem...

2005-03-22 Diskussionsfäden Michelle Konzack
Am 2005-03-22 01:44:37, schrieb Gerhard Meier:
 On Tue, Mar 22, 2005 at 12:07:17AM +0100, Michelle Konzack wrote:
  LIST1=`ls $HOME/devel/bash/[A-Z]*.tmp`
  LIST2=`ls $HOME/devel/bash/[a-z]*.tmp`
  
 
 Ganz nebenbei, useless use of backticks:
 
 LIST1=$HOME/devel/bash/[A-Z]*.tmp
 LIST2=$HOME/devel/bash/[a-z]*.tmp

???

Ich will nicht $HOME/devel/bash/[A-Z]*.tmp als String haben,
sondern die Ausgabe von `ls $HOME/devel/bash/[A-Z]*.tmp`.

 /GM

Greetings
Michelle

-- 
Linux-User #280138 with the Linux Counter, http://counter.li.org/ 
Michelle Konzack   Apt. 917  ICQ #328449886
   50, rue de Soultz MSM LinuxMichi
0033/3/8845235667100 Strasbourg/France   IRC #Debian (irc.icq.com)


signature.pgp
Description: Digital signature


Re: Eigenatiges BASH problem...

2005-03-22 Diskussionsfäden Bruno Hertz
On Tue, 2005-03-22 at 09:12 +0100, Michelle Konzack wrote:

  $HOME/devel/bash/[A-Z]*.tmp
 Beim Obigen sollte er aber nur Dateien anzeigen die mit den
 Grobuchstaben [A-Z] anfangen...

Genau darber reden wir die ganze Zeit, von den Buchstaben
'A bis Z'. Wenn die collation order aber z.B.
a A b B  z Z
ist, sind das aber eben nicht nur Grossbuchstaben (sondern alle
Gross- und Kleinbuchstaben von a bis z ausser 'klein a').

 Unter SLINK, POTATO und WOODY r0 funktioniert es...
 Genaugenommen ber 30 meiner alten Scripte.
 Seit r1 oder r2 habe ich nur noch Fehlermeldungen.
 
 Ich mute feststellen das bei WOODY seit release 0
 einiges kaputt gegangen ist...

Mag sein, ich habe kein Woody installiert. Die Thematik ist jedoch
nicht neu. Du wirst einige bug filings finden, die hiermit zusammen
hngen, aber eigentlich keine bugs sind.

 Also ich mache jetzt zur Zeit ein
 
 LIST=`LC_COLLATE=C $HOME/devel/bash/*.tmp`
 
 womit ich sortiert die Dateien angezeigt bekomme,
 erst die mit Grobuchstaben anfangen, dann den Rest.
 

Na also, Problem gelst.

  Ich nehme daher an, dass du in der interaktiven Shell ein Setting hast,
  das eben nicht in Skripte exportiert wird (?)
 
 ???  Wie denn das ???

Indem du LC_COLLATE (e.g. im profile) zwar setzt aber nicht exportierst.

 Ich frage mich nur, warum mitten in einem
 Release wie WOODY sowas gendeet wird...

Gute Frage. Wie gesagt handelt es sich um die glibc. Wenn also irgendwo
ein 'Fehler' ist, liegt er dort.




-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: Eigenatiges BASH problem...

2005-03-22 Diskussionsfäden Bruno Hertz
On Tue, 2005-03-22 at 09:17 +0100, Michelle Konzack wrote:

  LC_COLLATE=en_US
 Mach hier de_DE

Mach ich auch mal ... (Sarge)

  [EMAIL PROTECTED]:~/tmp$ ls [A-Z]
  A  z  Z
 Dann bekommste hier:A  Z

Bekomm ich damit auch mit de_DE.

  [EMAIL PROTECTED]:~/tmp$ ls [a-z]
  a  A  z
 genauso wie hier:   a  z

Dito.

 und ein:ls *
 liefert:A  Z  a  z

Kriege ich auch mit de_DE. Die collation order ist hier also
insoweit 'in Ordnung', als sie der von ASCII entspricht, anders
als z.B. in en_US.

Die Frage bleibt also, warum bei dir das bei einigen/allen (?)
Skripten anders ist. Fr mich gibt z.B. echo.sh
 
 #!/bin/sh
 echo $LC_COLLATE
 ls [A-Z]*
 ls [a-z]*
 ls *

die Ausgabe

 de_DE
 A  Z
 a  z
 A  Z  a  z

also wie du es haben wolltest, und (erwartungsgemss) genauso wie in
der interaktiven Shell.

Wie rufst du denn deine Skripte auf? Ich kann nur vermuten, dass
irgendwo die locale (resp. LC_COLLATE) umgesetzt wird  ...





-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: Eigenatiges BASH problem...

2005-03-21 Diskussionsfäden Bruno Hertz
On Tue, 2005-03-22 at 00:07 +0100, Michelle Konzack wrote:

 ???  -  Sprich, die Dateien werden AaBbCcDdEe... sortiert.

Liegt an der collation order, die (bestenfalls) mit LC_COLLATE=C
der von ASCII entspricht.

Also
 export LC_COLLATE=C
 ls [A-Z]*.tmp

oder besser
 ls [[:upper:]]*.tmp




-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: Eigenatiges BASH problem...

2005-03-21 Diskussionsfäden Michelle Konzack
Am 2005-03-22 01:20:03, schrieb Bruno Hertz:
 On Tue, 2005-03-22 at 00:07 +0100, Michelle Konzack wrote:
 
  ???  -  Sprich, die Dateien werden AaBbCcDdEe... sortiert.
 
 Liegt an der collation order, die (bestenfalls) mit LC_COLLATE=C
 der von ASCII entspricht.

Danke, habe jetzt 

LIST=`LC_COLLATE=C $HOME/devel/bash/*.tmp`

Funktioniert einwandfrei...

Fehlt nur noch das Problem, warum

$HOME/devel/bash/[A-Z]*.tmp

in der BASH funktioniert, während in Scripten alle Dateien
gemischt werden, also [A-Z] einfach ignoriert wird.

Greetings
Michelle

-- 
Linux-User #280138 with the Linux Counter, http://counter.li.org/ 
Michelle Konzack   Apt. 917  ICQ #328449886
   50, rue de Soultz MSM LinuxMichi
0033/3/8845235667100 Strasbourg/France   IRC #Debian (irc.icq.com)


signature.pgp
Description: Digital signature


Re: Eigenatiges BASH problem...

2005-03-21 Diskussionsfäden Gerhard Meier
On Tue, Mar 22, 2005 at 12:07:17AM +0100, Michelle Konzack wrote:
 LIST1=`ls $HOME/devel/bash/[A-Z]*.tmp`
 LIST2=`ls $HOME/devel/bash/[a-z]*.tmp`
 

Ganz nebenbei, useless use of backticks:

LIST1=$HOME/devel/bash/[A-Z]*.tmp
LIST2=$HOME/devel/bash/[a-z]*.tmp

/GM


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: Eigenatiges BASH problem...

2005-03-21 Diskussionsfäden Bruno Hertz
On Tue, 2005-03-22 at 01:28 +0100, Michelle Konzack wrote:

 Fehlt nur noch das Problem, warum
 
 $HOME/devel/bash/[A-Z]*.tmp
 
 in der BASH funktioniert, whrend in Scripten alle Dateien
 gemischt werden, also [A-Z] einfach ignoriert wird.

Also, ich habe LC_COLLATE=en_US, und bei mir werden auch auf der bash
Kommandozeile Gross- und Kleinschreibung in 'range expressions' nicht
unterschieden. Ich habe also auch in diesem Fall das gleiche Verhalten,
wie du es nur fr Skripte beobachtest.

Ich nehme daher an, dass du in der interaktiven Shell ein Setting hast,
das eben nicht in Skripte exportiert wird (?)

Die Geschichte ist insgesamt nicht ganz durchsichtig, insbesondere was
die glibc Implementierung angeht. Generell arbeite ich daher lieber mit
character classes wie [[:upper:]].

Hier ist ein Thread, in dem das Thema (weiter unten, ab Posting 9)
diskutiert wird
http://groups.google.ch/groups?hl=delr=threadm=9qd9ot0e1b4cpboupq7p78ch9o4ub6vcb1%404ax.com
inklusive Beschimpfungen, aber leider auch nicht erschpfend :)

Fr letztendlichen Durchblick ist wohl das Verstndnis von
/usr/share/i18n/locales/iso14651_t1
ntig ...




-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: Eigenatiges BASH problem...

2005-03-21 Diskussionsfäden Gerhard Meier
On Tue, Mar 22, 2005 at 01:28:20AM +0100, Michelle Konzack wrote:
 Fehlt nur noch das Problem, warum
 
 $HOME/devel/bash/[A-Z]*.tmp
 
 in der BASH funktioniert, während in Scripten alle Dateien
 gemischt werden, also [A-Z] einfach ignoriert wird.

Das liegt daran, dass die bash imho kaputt ist. Siehe

http://www.linuxhaters.de/Shell

D.h sie verhaelt sich nur den Umgebungsvariablen entsprechend,
wenn die Umgebungsvariablen beim Start der Bash schon gesetzt
sind.

/GM


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: Eigenatiges BASH problem...

2005-03-21 Diskussionsfäden Bruno Hertz
On Tue, 2005-03-22 at 02:05 +0100, Gerhard Meier wrote:

 D.h sie verhaelt sich nur den Umgebungsvariablen entsprechend,
 wenn die Umgebungsvariablen beim Start der Bash schon gesetzt
 sind.

Kann ich nicht besttigen:

[EMAIL PROTECTED]:~/tmp$ ls -l
total 0
-rw-r--r--  1 bhertz bhertz 0 2005-03-22 02:40 a
-rw-r--r--  1 bhertz bhertz 0 2005-03-22 02:40 A
-rw-r--r--  1 bhertz bhertz 0 2005-03-22 02:40 z
-rw-r--r--  1 bhertz bhertz 0 2005-03-22 02:40 Z
[EMAIL PROTECTED]:~/tmp$ locale | grep COLLATE
LC_COLLATE=en_US
[EMAIL PROTECTED]:~/tmp$ ls [A-Z]
A  z  Z
[EMAIL PROTECTED]:~/tmp$ ls [a-z]
a  A  z
[EMAIL PROTECTED]:~/tmp$ export LC_COLLATE=C
[EMAIL PROTECTED]:~/tmp$ ls [A-Z]
A  Z
[EMAIL PROTECTED]:~/tmp$ ls [a-z]
a  z





-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)