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

Re: shell und LANG=de_DE@euro



Stefan Blechschmidt <stefan.blechschmidt@sbsbavaria.de> writes:

> Ein kleines Skript das mir die Größe des Sicherungsvolumens berechnet,
> funktioniert nur wenn die Variabel 'LANG=de_DE@euro' exportiert wird.
> Exports mit 'de_DE' oder 'C' funktionieren nicht. 
> Ich bekomme dann die Fehlermeldung " (standard_in) 1: parse error ".
> Kann sich das einer von euch erklären?


Eines fällt jedenfalls gleich auf:

> yes=$( (du -cb $(cat $pfad/redtux.yes)  2>/dev/null ) | grep insgesamt | awk '{print $1}')
> no=$((du -cb $(cat $pfad/redtux.no) 2> /dev/null )| grep insgesamt | awk '{print $1}') 

yes und no bleiben leeer, wenn die Sprache anders als deutsch ist.

> erg=$(echo "scale=10;($yes - $no) / 1024 / 1024" | bc)

Und das ergibt dann einen parse error von bc, wie Du ja feststellst.

> funktioniert nur wenn die Variabel 'LANG=de_DE@euro' exportiert wird.
> Exports mit 'de_DE' oder 'C' funktionieren nicht. 

Klar ist, dass es mit LANG=de_DE@euro geht und mit LANG=C nicht
(vorausgesetzt, LC_MESSAGES und LC_ALL sind leer oder nicht existent).

Was sagt locale -a? Wenn de_DE nicht aufgeführt ist, wäre erklärt,
warum es damit nicht geht.

Noch was: Es ist generell schlecht, shell-Skripte zu bauen, die das
Vorhandensein von bestimmten locales voraussetzen. Das gilt sowohl für
de_DE als auch de_DE@euro. Besser ist es, "C" oder "POSIX" zu
verwenden. Und Dein workaround: 

> export LANG=de_DE@euro

ist doppelt böse, weil er 1) eine deutsche locale voraussetzt und 2)
eh ignoriert wird, falls LC_MESSAGES oder LC_ALL auf etwas anderes
zeigen.

Shell-Skripte, die Texte auswerten, sollten immer LC_ALL=C oder
LC_ALL=POSIX explizit setzen. LC_ALL überschreibt die LC_- und LANG -
Variablen und C bzw. POSIX ist immer vorhanden.

HTH,

 Heike



Reply to: