ctr*_*lor 9 bash environment-variables locale
我想设置语言环境。
我的 ~/.profile 中有这个
#language
export LANG=en_GB.utf8
export TESTING123=en_GB.utf8
Run Code Online (Sandbox Code Playgroud)
但是当我输入:
echo $LANG $TESTING123
Run Code Online (Sandbox Code Playgroud)
我得到(未设置 LANG,但已设置 TESTING123)
en_US.utf8 en_GB.utf8
Run Code Online (Sandbox Code Playgroud)
如果我export LANG=en_GB.utf8直接在 shell 中执行,则一切正常
#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=
Run Code Online (Sandbox Code Playgroud)
系统是 Debian 7.2,外壳是 bash。
还有许多其他初始化文件,其中变量可以在应用.profile诸如.bash_profile .bashrc...etc之后设置,或者只是从.profile自身调用的其他非标准文件。我建议您首先在主目录中查找变量的每次出现:
grep "LANG=" .*
Run Code Online (Sandbox Code Playgroud)
在 debian 中,您可以使用以下命令设置语言环境:
# dpkg-reconfigure locales
Run Code Online (Sandbox Code Playgroud)
它将创建/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=
Run Code Online (Sandbox Code Playgroud)
检查是否有~/.bash_profile或~/.bash_login; 他们会覆盖~/.profile。
从man bash:
当 bash作为交互式登录 shell或带有 --login 选项的非交互式 shell 被调用时,它首先从文件 中读取并执行命令
/etc/profile(如果该文件存在)。读取该文件后,它会按顺序 查找~/.bash_profile、~/.bash_login、 和 ,并从第一个存在且可读的文件中读取并执行命令。~/.profile
“作为交互式登录shell”很重要,因为交互式 shell 通常不是登录 shell。例如,如果您只是更改其中一个文件并启动一个新的 GUI 终端,则它将不适用。仅当您实际登录时才会读取它。
另一种可能性是您的 LANG 随后被系统范围重置bashrc;检查是否源自~/.bashrc,然后,例如
grep LANG /etc/bashrc
Run Code Online (Sandbox Code Playgroud)