我在尝试对一个稍微定制的 Debian 映像进行一些无头工作时遇到了问题。问题是已安装的语言环境列表已缩减为以下内容:
C
en_GB
en_GB.iso88591
en_GB.iso885915
en_GB.utf8
POSIX
然而,当我以 root 身份登录(使用原始配置文件)时,我发现:
~# set | grep LC_
LC_CTYPE=en_US.UTF-8
这是唯一设置的 LC_ 环境变量,可能意味着它在某处被明确设置(鉴于 /etc/default/locale 仅包含 LANG=en_GB,我看不出还有其他选择)。但是,我看不出它在哪里设置,而且它错误的事实会阻止例如 postgresql-8.4 的安装。我知道我可以做一个
LC_CTYPE=en_GB apt-get install postgresql-8.4
解决这个问题,但我真的很想了解这个设置从何而来,而且我真的不喜欢安装不必要的语言环境来消除此问题。那么:这个 LC_CTYPE 设置从何而来?我该如何消除它?
答案1
供将来参考,我已经找到了问题,它与 Bash 无关。
问题是 sshd_config 有以下条目:
AcceptEnv LANG LC_*
这样,我的本地环境变量(LC_whatever,包括有问题的 LC_CTYPE)就可以覆盖远程设置,因此,当我连接时,ssh 进程会相应地设置其环境变量,而 bash 进程则会忠实地继承它们。在此进程中,没有检查 LC_CTYPE 设置在 SSH 连接的远端是否有效。
我的临时解决方法是在远端运行的特定命令中指定已知良好的 LC_CTYPE。我不知道这个问题的“正确”解决方案是什么。
答案2
您可以安装缺少的语言环境:
apt-get install debconf
dpkg-reconfigure locales
选择您想要安装的区域设置。