web-dev-qa-db-ja.com

〜/ .profileにLANGの環境変数が設定されていますが、設定されていません

ロケールを設定したい。

私の〜/ .profileにこれがあります

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

しかし、私が入力すると:

echo $LANG $TESTING123

取得します(LANGは設定されていませんが、TESTING123が設定されています)

en_US.utf8 en_GB.utf8

私が行った場合 export LANG=en_GB.utf8シェルで直接、すべて機能します

#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=

システムはDebian 7.2、シェルはbashです。

8
ctrl-alt-delor

.profile.bash_profile ... etcなどの.bashrcの適用後に変数を設定できる他の多くの初期化ファイル、または単に.profile自体から呼び出される他の非標準ファイルがあります。まず、ホームディレクトリで変数のすべての出現箇所を探すことをお勧めします。

grep "LANG=" .* 
7
Slyx

Debianでは、次のコマンドを使用してロケールを設定します。

# dpkg-reconfigure locales

/etc/default/localeファイルを作成し、LANG変数のみを追加します。すべてのLC_*変数をカスタマイズする場合は、それらにも追加できます。

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=
4

手動で実行しなければならないのが原因で、最終的にこれを理解しました。 debianでは、これはupdate-localeユーティリティ。コマンド

update-locale --reset

/etc/default/localeファイルを無視します(LANG変数をコメント化するだけです); localeの結果:

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

コマンド

update-locale LANG=en_US.UTF-8

あなたのLANGを...に設定します...あなたはそれを推測したen_US.UTF-8結果としてlocaleが生成されます:

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=

そして最後に、私のすべての拠点をカバーするだけです...

update-locale LANG=C

LANGCに設定し、localeを出力します。

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=
3
ehiller

~/.bash_profileまたは~/.bash_loginがあるかどうかを確認してください。それらは~/.profileをオーバーライドします。

man bashから:

Bashが呼び出されるとインタラクティブログインシェルとしてまたは--loginオプションを使用した非インタラクティブシェルとして、最初にファイル/etc/profileからコマンドを読み取り、実行します(そのファイルが存在する場合) 。そのファイルを読み取った後、~/.bash_profile~/.bash_login、および~/.profileをこの順序で検索し、存在するコマンド最初のコマンドからを読み取って実行します。読み取り可能です。

「インタラクティブloginシェルとして」は、インタラクティブシェルがログインシェルではないことが多いため、重要です。たとえば、これらのファイルの1つを変更して新しいGUI端末を起動しただけでは、適用されません。実際にログインしたときにのみ読み取られます。


別の可能性として、システム全体でLANGがリセットされているbashrc;ソースが~/.bashrcで提供されているかどうかを確認します。たとえば、.

grep LANG /etc/bashrc
2
goldilocks