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 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. 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/88452356 67100 Strasbourg/France IRC #Debian (irc.icq.com)
Attachment:
signature.pgp
Description: Digital signature