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: