在我的 中~/.profile
,我有:
export LANG=C.UTF-8
我认为那是 Ubuntu 的默认设置。
然而,当我启动一个 shell(例如 Konsole)时,我得到:
gz@gcomputer:~$ echo $LANG
de_DE.UTF-8
即使我将我的改为~/.profile
,export LANG=en_US.UTF-8
也没有发现任何区别。
为什么?我该如何解决这个问题?
答案1
根据这个答案etc/default/locale
您应该在和中更改语言设置~/.pam_environment
,而不是在~/.profile
etc/default/locale
是由update-locale
你这样做来设置的LANG=en_GB.UTF-8
(该文件还设置了语言)
update-locale LANG=en_GB.UTF-8
在 ~/.pam_environment 中语言设置看起来与以下内容相同/etc/default/locale
:
LANGUAGE=en_GB:en
LANG=en_GB.UTF-8
并可根据需要进行编辑。您必须注销并重新登录或使用source
:
一般来说您必须注销并重新登录才能使所做的更改~/.profile
生效。
但是,你可以使用以下方法让它们立即生效source
source ~/.profile
例子:
我编辑我的 ~/.profile 以包含:
export foo=bar
保存并退出...
在新的 shell 中:
$ echo $foo
(没有什么)
$ source ~/.profile
$ echo $foo
bar
如果退出并重新登录后没有任何变化,请检查~/.bash_profile
是否~/.bash_login
存在(因为正如@ByteCommander 所提到的,如果它们确实存在,则~/.profile
没有来源)
如果确实存在,最好的办法可能是将它们中的任何命令复制到您的命令中,然后将其重命名为和~/.profile
之类的名称,这样就可以获取来源(并且您不依赖 bash 作为您的 shell)~/.bash_profile_old
~/.bash_login_old
~/.profile
如果两者都不存在,则可能~/.profile
由于某种原因仍未获得来源:
建议的解决方法是使用...~/.pam_environment
答案2
由于这里无法详述的原因,bash一些每个用户的配置文件。最重要的两个是.profile
和.bashrc
。Bash 读取非此即彼每次启动时都会执行其中一个,但不会同时执行两个,这取决于一些对我来说太混乱而难以记住的条件。
我的做法是把所有有意义的东西都放进去.profile
,再加上一行
profile_loaded=t
然后我有一个.bashrc
由
if test -z "$profile_loaded"; then
. ~/.profile
fi
如果你采用这种方法,重要的是确保一切.profile
都按照幂等,这是一个花哨的说法,意思是“多次执行此操作与仅执行一次相同”。实现此目的的一种简单方法是将 的全部内容包装.profile
在类似的条件中:
if test -z "$profile_loaded"; then
# ... all the actual work goes here ...
profile_loaded=t
fi
(如果您有名为.bash_profile
或 的文件.bash_login
,这会使问题更加混乱:我强烈建议将其内容复制到 中.profile
,删除它们,然后清理 中的任何重复内容.profile
。)