Ich habe eine Umgebungsvariable für LANG in ~ / .profile festgelegt, aber sie wird nicht festgelegt

8

Ich möchte das Gebietsschema festlegen.

Ich habe das in meinem ~ / .profil

#language
export LANG=en_GB.utf8
export TESTING123=en_GB.utf8

Aber wenn ich tippe:

echo $LANG $TESTING123

Ich bekomme (LANG nicht gesetzt, aber TESTING123 ist gesetzt)

en_US.utf8 en_GB.utf8

Wenn ich es export LANG=en_GB.utf8direkt in der Shell mache, funktioniert alles

#export LANG=en_GB.utf8
#echo $LANG
en_GB.utf8
#locale
LANG=en_GB.utf8
LANGUAGE=
LC_CTYPE="en_GB.utf8"
LC_NUMERIC="en_GB.utf8"
LC_TIME="en_GB.utf8"
LC_COLLATE="en_GB.utf8"
LC_MONETARY="en_GB.utf8"
LC_MESSAGES="en_GB.utf8"
LC_PAPER="en_GB.utf8"
LC_NAME="en_GB.utf8"
LC_ADDRESS="en_GB.utf8"
LC_TELEPHONE="en_GB.utf8"
LC_MEASUREMENT="en_GB.utf8"
LC_IDENTIFICATION="en_GB.utf8"
LC_ALL=

System ist Debian 7.2, Shell ist Bash.

Strg-Alt-Delor
quelle
Es sieht so aus, als würde jemand anderes die Variable überschreiben. Können Sie die Zeile echo $LANG > /tmp/testdirekt nach dem Exportbefehl hinzufügen ?
SHW

Antworten:

7

Es gibt viele andere Initialisierungsdateien, in denen die Variablen nach dem Anwenden .profilevon .bash_profile .bashrc... usw. festgelegt werden können, oder einfach eine andere nicht standardmäßige Datei, die von .profilesich aus aufgerufen wird . Ich schlage vor, dass Sie zuerst nach allen Vorkommen Ihrer Variablen in Ihrem Home-Verzeichnis suchen:

grep "LANG=" .* 
Slyx
quelle
4

In Debian legen Sie Gebietsschemas mit dem folgenden Befehl fest:

# dpkg-reconfigure locales

Es wird die /etc/default/localeDatei erstellt und nur die LANGVariable hinzugefügt . Wenn Sie alle LC_*Variablen anpassen möchten , können Sie sie auch dort hinzufügen:

LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE=en_US.UTF-8
LC_NUMERIC=en_US.UTF-8
LC_TIME=en_US.UTF-8
LC_COLLATE=C
LC_MONETARY=en_US.UTF-8
LC_MESSAGES=C
LC_PAPER=en_US.UTF-8
LC_NAME=en_US.UTF-8
LC_ADDRESS=en_US.UTF-8
LC_TELEPHONE=en_US.UTF-8
LC_MEASUREMENT=en_US.UTF-8
LC_IDENTIFICATION=en_US.UTF-8
LC_ALL=
Mikhail Morfikov
quelle
2
Debian ist ein Mehrbenutzersystem. Es muss für jeden Benutzer eine Möglichkeit geben, ein eigenes Gebietsschema zu haben.
Strg-Alt-Delor
Ich verwende openboxund in meinem Fall kann ich jedes der Menge LC_*und LANGVariablen in ~/.config/openbox/environmentunter Verwendung export. Wenn Sie einen gnomeDesktop verwenden, sollten Sie dessen Option aktivieren. Ich erinnere mich, dass irgendwo in der Systemsteuerung eine Sprache festgelegt werden musste.
Mikhail Morfikov
3

Ging durch und dachte mir das endlich, weil es mich verrückt machte, es manuell machen zu müssen, schien nicht richtig. Unter Debian kann dies mit dem update-localeDienstprogramm erfolgen. Der Befehl

update-locale --reset

bewirkt, dass die /etc/default/localeDatei ignoriert wird (sie kommentiert einfach die LANGVariable aus); was zu einem localevon:

LANG=C
LANGUAGE=
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=C

Der Befehl

update-locale LANG=en_US.UTF-8

wird Ihr LANGauf ... setzen Sie haben es erraten, en_US.UTF-8was zur localeErzeugung von:

LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

Und schließlich nur, um alle meine Grundlagen abzudecken ...

update-locale LANG=C

setzt LANGauf, Cwas zur localeAusgabe führt:

LANG=C
LANGUAGE=
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=
ehiller
quelle
Debian ist ein Mehrbenutzersystem. Es muss für jeden Benutzer eine Möglichkeit geben, ein eigenes Gebietsschema zu haben.
Strg-Alt-Delor
2

Überprüfen Sie, ob Sie ein ~/.bash_profileoder haben ~/.bash_login; sie werden überschreiben ~/.profile.

Von man bash:

Wenn bash als interaktive Anmeldeshell oder als nicht interaktive Shell mit der Option --login aufgerufen wird, werden zuerst Befehle aus der Datei gelesen und ausgeführt /etc/profile, sofern diese Datei vorhanden ist. Nach dem Lesen dieser Datei sucht sie nach ~/.bash_profile, ~/.bash_loginund ~/.profilein dieser Reihenfolge und liest und führt Befehle von der ersten aus , die vorhanden und lesbar ist.

"Als interaktive Anmeldeshell " ist von Bedeutung, da interaktive Shells häufig keine Anmeldeshells sind. Wenn Sie beispielsweise nur eine dieser Dateien ändern und ein neues GUI-Terminal starten, wird dies nicht angewendet. Es wird nur gelesen, wenn Sie sich tatsächlich anmelden.


Eine andere Möglichkeit besteht darin, dass Ihr LANG anschließend systemweit zurückgesetzt wird bashrc. Überprüfen Sie, ob eine Quelle vorhanden ~/.bashrcist, z

grep LANG /etc/bashrc
Goldlöckchen
quelle
Tut mir leid, dass ich nicht besser aufgepasst habe! Ich habe unten eine weitere Möglichkeit (Long Shot) hinzugefügt.
Goldlöckchen