7.9. Die Startdateien von Bash

Das Shell-Programm /bin/bash (im weiteren Verlauf nur „shell“ oder „bash“ genannt) benutzt einige Startdateien zum Einrichten der Benutzerumgebung. Jede Datei hat einen bestimmten Zweck und beeinflusst Login- und Interaktiv-Umgebungen unterschiedlich. Die Bash-Dateien in /etc enthalten globale Einstellungen. Wenn eine entsprechende Konfigurations-Datei auch im Persönlichen Ordner des Benutzers existiert, überschreibt sie die globalen Einstellungen.

Nach einem erfolgreichen Login wird mit /bin/login eine interaktive Login-Shell gestartet. Dazu wird die Datei /etc/passwd eingelesen. Eine interaktive nicht-Login-Shell wird von der Kommandozeile aus gestartet (z. B. [prompt]$/bin/bash). Eine nicht-interaktive Shell findet man üblicherweise bei laufenden Shell-Skripten. Sie ist nicht interaktiv, weil Sie ein Skript abarbeitet und zwischen den Kommandos nicht auf Eingaben vom Benutzer wartet.

Weitere Informationen finden Sie mit info bash im Abschnitt Bash Startup Files and Interactive Shells.

Die Dateien /etc/profile und ~/.bash_profile werden gelesen, wenn die Shell als interaktive Login-Shell aufgerufen wurde.

Die untenstehende Basisversion der Datei /etc/profile stellt ein paar notwendige Umgebungsvariablen für NLS-Unterstützung ein. Eine korrekte Einstellung dieser Variablen bewirkt:

Ersetzen Sie <ll> mit dem zweistelligen Ländercode für die gewünschte Sprache (z. B. „de“) und <CC> mit dem zweistelligen Code für das gewünschte Land (z. B. „DE“ oder „AT“). <charmap> sollte durch den korrekten Zeichensatz ersetzt werden, z. B. „iso8859-15“. Auch (optionale) Parameter wie „@euro“ können angehängt werden.

Mit dem folgenden Kommando erhalten Sie eine Liste aller von Glibc unterstützten Locales:

locale -a

Locales haben häufig mehrere Synonyme. Beispielsweise wird „ISO-8859-1“ häufig auch als „iso8859-1“ und „iso88591“ geschrieben. Einige Programme können nicht mit den verschiedenen Synonymen umgehen, daher ist es das sicherste, den korrekten Namen für ein Locale anzugeben. Um den kanonischen Namen für ein Locale herauszufinden, führen Sie das folgende Programm aus, wobei <locale name> die Ausgabe von locale -a für Ihr bevorzugtes Locale ist (in diesem Beispiel „de_DE.iso88591“).

LC_ALL=<locale-Name> locale charmap

Für das Locale „de_DE.iso88591“ ergibt das obige Kommando:

ISO-8859-1

Das endgültige Ergebnis lautet also „de_DE.ISO-8859-1“. Bevor Sie diese Locale-Einstellung allerdings in eine der Startdateien der Bash eintragen, sollten Sie sie testen:

LC_ALL=<locale name> locale language
LC_ALL=<locale name> locale charmap
LC_ALL=<locale name> locale int_curr_symbol
LC_ALL=<locale name> locale int_prefix

Das obige Kommando sollte Ihnen folgende Daten ausgeben: Land und Sprache, den vom Locale benutzten Zeichensatz, die Währung und den internationalen Telefonnumern-Prefix. Falls eines der Kommandos eine Fehlermeldung wie die folgende ausgibt, dann wurde entweder die Locale in Kapitel 6 nicht installiert, oder wird von der Standardinstallation von Glibc nicht unsterstützt.

locale: Cannot set LC_* to default locale: No such file or directory

Falls Sie diese oder eine ähnliche Fehlermeldung erhalten, sollten Sie die gewünschte Locale installieren oder eine andere Locale verwenden. Zur Installation der fehlenden Locale benutzen Sie das Programm localedef. Alle weiteren Schritte im Buch gehen davon aus, dass Sie keine solche Fehlermeldung wie oben erhalten haben, bzw. dass der Fehler beseitigt wurde.

Es gibt einige Pakete außerhalb von LFS, die Ihre Locale möglicherweise nicht richtig unterstützen. Ein Beispiel dafür ist die X-Bibliothek (Teil des X-Window-System), die die folgende Meldung ausgibt, wenn der Name für das Locale nicht exakt auf eine der internen Zeichensatztabellen passt:

Warning: locale not supported by Xlib, locale set to C

In vielen Fällen erwartet Xlib, dass der Name für den Zeichensatz in Großbuchstaben und mit Bindestrichen geschrieben wird. Also "ISO-8859-1" statt "iso88591". Manchmal hilft es auch, den Zeichensatz aus dem Namen der Locale wegzulassen. Dies können Sie mit dem Kommando locale charmap in beiden Locales prüfen. Sie würden also "de_DE.ISO-8859-15@euro" durch "de_DE@euro" ersetzen, damit Xlib Ihre Locale versteht.

Möglicherweise haben noch weitere Programme Schwierigkeiten mir Ihrer Locale (und geben vielleicht noch nicht einmal eine Fehlermeldung aus), falls der Name der Locale nicht den Annahmen des Programmierers entspricht. In solchen Fällen kann man versuchen herauszufinden, wie andere Linux-Distributionen mit dem Problem umgehen.

Wenn Sie die korrekten Locale-Einstellungen herausgefunden haben, erstellen Sie die Datei /etc/profile:

cat > /etc/profile << "EOF"
# Begin /etc/profile

export LANG=<ll>_<CC>.<charmap><@modifiers>

# End /etc/profile
EOF

Die Locale „C“ (Standard) und „en_US“ (empfohlene Locale für englische Benutzer in den USA) unterscheiden sich. „C“ verwendet den Zeichensatz US-ASCII mit 7 Bit und behandelt Zeichen mit gesetztem hohen Bit als ungültig. Das ist auch der Grund dafür, dass z. B. ls diese Zeichen mit einem Fragezeichen darstellt. Auch der Versuch, eine E-Mail mit solchen Zeichen mit Mutt oder Pine zu versenden ergibt eine nicht RFC-konforme Mail (der Zeichensatz in einer solchen Mail ist dann „unknown 8-bit“). Sie können die Locale „C“ also nur einsetzen, wenn Sie sicher sind, dass Sie niemals 8-Bit-Zeichen benötigen.

UTF-8-basierte Locales werden leider von vielen Programmen nicht richtig unterstützt. Das Programm watch zeigt in UTF-8-Locales nur ASCII-Zeichen an; diese Beschränkung besteht nicht in normalen 8-Bit-Locales wie en_US. Es wird allerdings daran gearbeitet, solche Probleme zu dokumentieren und zu beheben. Siehe auch: http://www.linuxfromscratch.org/blfs/view/svn/introduction/locale-issues.html.