LANG 始终是本地的,忽略 ~/.profile

LANG 始终是本地的,忽略 ~/.profile

在我的 中~/.profile,我有:

export LANG=C.UTF-8

我认为那是 Ubuntu 的默认设置。

然而,当我启动一个 shell(例如 Konsole)时,我得到:

gz@gcomputer:~$ echo $LANG
de_DE.UTF-8

即使我将我的改为~/.profileexport 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由于某种原因仍未获得来源:

请参阅 Eliah Kagan 的回答以了解更多详情

建议的解决方法是使用...~/.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。)

相关内容