ForumLinux Scripting unter OpenSuSE
Paul Göbel – Mittwoch, 17. März 2010 10:01 Uhr

Hallo Community,
wenn ich unter dem angemeldeten User Scripte erstelle und in einem KDE-Terminalfenster testweise laufen lasse, ist die Ausgabe von auf gerufenen Bash-Befehlen des Scripts in deutsch.
Die Scripte sollen dann aber per cron gestartet werden. Dies ist auch nicht das Problem. Nur liefern die Scripte, wenn sie per cron gestartet werden, nicht das erwartete Ergebnis. Das Problem ist, die Bash-Befehle geben ihre Ergebnisse in englisch aus und somit werden meine Abfragen im Script nicht richtig ausgewertet.

Was mach ich da falsch, wo muss ich was ändern ?

System: OpenSuSe 11.2
Systemsprache: deutsch ist eingestellt, auch für root

Vielleicht kann mir da jemand weiterhelfen.

Grüße
Paul

3 Antworten
BS – Mittwoch, 17. März 2010 10:21 Uhr

Hallo,

für mal als normaler User den Befehl “locale” aus und wechsel dann mit “su -” (Minus nicht vergessen) zu User root und mach denn Befehl nochmal!

Das kannst du wie flgd umstellen:
Yast -> System -> Editor f sysconfig -> System -> Enviroment -> Language -> “ROOT_USES_LANG” von “ctype” auf “yes” stellen!

BS

Paul Göbel – Mittwoch, 17. März 2010 10:59 Uhr

Hallo BS,
– den – ;-)

Das Enviroment ist auf diese Weise umgestellt. (siehe Systemsprache: in der Frage)

Trotzdem Danke.

Es geht auch nur um die Ausgabe der Bash-Befehle, wenn sie innerhalb eines Scriptes aufgerufen und das Script durch cron gestartet wird.

z.B.: der Befehl ‘date’ innerhalb eines Scriptes liefert, unter root oder einem anderen user aufgerufen, das Ergebnis in deutsch. Wird das Script von cron aufgerufen, ist das Ergebnis in englisch.

Gibt es eine gesonderte Einstellungsmöglichkeit im System für ein cron-Enviroment ?????

Paul

Michael – Mittwoch, 17. März 2010 14:34 Uhr

Hallo Paul,
eigentlich einfach (wenn mans weis):

In deinem script, in der 2. Zeile, oder später, aber vor dem aufruf von date folgendes setzen:

export LANG=de_DE.utf8

oder wenn du ‘nur’ die ausgabe von date in deutsch haben möchtest

den aufruf von ‘date’ durch ‘LANG=de_DE.utf8 date’ ersetzen.

falls du alle vom cron gestartete programm in einer Sprache haben möchtest muß dies in der crontab gestezt werden. Siehe auch:

man 5 crontab

entweder in deiner privaten crontab (mit crontab -e) vor allen Zeit-zeilen oder für alle in der /etc/crontab.

letzteres is gefährlich und nicht zu empfehlen, da viele, von cron gestartete Programme ein LANG=C erwarten.

Empfehlung also: export LANG=de_DE.utf8 in deinem script. Dann macht dieses script was es soll (ausprobieren mit ‘LANG=C scriptname’ im terminal/konsole).

Besten Gruß auch

Roland M. Egloff – Mittwoch, 17. März 2010 12:23 Uhr

Hallo Paul,

Du kannst in den Dateien:

~/.bashrc

und/oder

/etc/bashrc.local

die bash variable “LANG” definieren, also

export LANG=en_US.UTF-8

(oder was auch immer)

Gruss

Roland

Paul Göbel – Mittwoch, 17. März 2010 13:58 Uhr

Hallo Roland,

unter OpenSuSE gibt es in /etc diebash.bashrc.local. Hier hab ich deinen Vorschlag eingetragen (de_DE.UTF-8). Hat leider unter cron keine Auswirkung. Ergebnisvon z.B. date wird immer noch in Englisch ausgegeben.

Unter ~/ existiert keine .bashrc, deshalb hab ich die Datei dort mit der Variablen LANG=de_DE.UTF-8 erzeugt. Ebenfalls Ergebnisnegativ.

Gruß

Paul

Philipp Klaus – Mittwoch, 17. März 2010 14:23 Uhr

Bau die Environment-Variable doch einfach in Dein Script ein. Wenn das Script von der verwendeten Sprache abhängt, ist das am besten.

Für Bash-Scripts kannst Du einfach

export LANG=”de_DE.UTF-8″

am Anfang einbauen. In Perl würde das so aussehen:

$ENV{‘LANG’} = ‘de_DE.UTF-8’;

Dadurch erhalten alle danach aufgerufenen Shell-Befehle (also auch z.B. “date”) die neue Spracheinstellung und sollten so reagieren. Dies ist allerdings nicht sauberer Programmierstil, Scripte sollten immer sprachunabhängig entwickelt werden. “date” kannst Du z.B. das Format, das für die Ausgabe Verwendung finden soll, angeben.

Paul Göbel – Mittwoch, 17. März 2010 14:41 Uhr

Hallo Phillip,
Danke für deinen Hinweis.

Es klappt.

Ich hatte allerdings schon einen Teil deines Vorschlags eingebaut (LANG=”de_DE.UTF-8″). Das export davor hat es jetzt gebracht, aber wieso muß ich in einem Script dieses ‘export’ noch davor schreiben ?

Zum Programierstil geb ich dir recht, aber erstens ist es nur für mich und zweitens wieso ignoriert das Betriebssystem die eingestellte Sprache? Wenn das BS die eingestellte Sprache beachten würde, wäre das ganze nicht nötig.

Trotzdem Danke. Mein Script funktioniert jetzt so ich will.

Gruß

Paul

Eilert Eilig – Donnerstag, 18. März 2010 12:06 Uhr

Hallo Paul,
du fragst: “…wieso ignoriert das Betriebssystem die eingestellte Sprache?”

Du benutzt ja Linux, und Linux ist ein Multiuser Betriebssystem. Bei deinem PC bist du wahrscheinlich nur der einzige Benutzer, aber es wäre genauso möglich, dass du mehrere User einrichtest, die dann über das Netzwerk alle auf deinem PC arbeiten. Einige dieser Benutzer könnten dann in Japan sitzen, andere in Spanien. Jeder möchte, dass die Bildschirmausgaben dann in seiner Sprache erscheinen.

Deshalb ist die Spracheinstellung pro Benutzer im seinem /home Verzeichnis gemacht.

Cron-Scripte laufen unabhängig davon, ob du als Benutzer gerade vor dem PC sitzt oder nicht und nutzen deshalb auch nicht die Einstellungen aus deinem Home-Verzeichnis, und zum Glück auch nicht die Einstellungen aus dem Benutzerverzeichnis deines Neffen in Japan oder deiner Tochter in Gran Canaria.

Paul Göbel – Donnerstag, 18. März 2010 14:04 Uhr

Hallo Eilert,
schön erklärt und ist auch okay so. Nur, wenn ich ein System unter root lokalisiere und ich meine ‘das System’, z.B. für Deutschland, dann erwarte ich alle Ausgaben in deutscher Sprache. Unabhängig davon wer jetzt von wo daran arbeitet und dann natürlich auch seine eigene Sprache wie beschrieben einstellen kann.

Aber diese grundsätzliche Einstellung gibt es wohl nicht.

Gruß

Paul

Eilert Eilig – Donnerstag, 18. März 2010 22:57 Uhr

Einige Antworten hast du ja schon bekommen, wie du das auch für die Ausgaben in deinem cron-Script lösen kannst. Du hast damit also kein tatsächliches unlösbares Problem mehr.

Weil es kein wirkliches Problem damit gibt und sich dieses Verhalten von Unix und Linux bereits jahrelang und weltweit bewährt hat, wird deine Erwartungshaltung vermutlich nie als grundsätzliche Einstellung erfüllt werden.

Dir selbst bleibt es aber unbenommen, deinen eigenen PC derart zu konfigurieren und auch Anleitungen oder Scripte zu veröffentlichen, wie jedermann seinen PC komplett lokalisieren kann.