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:
Die Ausgaben von Programmen werden in die Sprache des Anwenders übersetzt
Korrekte Einordnung von Zeichen als Buchstaben, Zahlen und weiterer Klassen. Die bash benötigt diese Einstellungen, um Sonderzeichen in Befehlszeilen in nicht-englischen Locales verarbeiten zu können.
Korrekte landesspezifische alphabetische Sortierung
Passende Papiergröße
Korrekte Formatierung von Währungs-, Zeit- und Datumswerten
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.