[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Eigenatiges BASH problem...



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


Reply to: