请问,
有人能解释一下这个奇怪的与语言环境相关的警告吗?自从我半年前安装服务器以来,它就一直困扰着我。它是“无法将 LC_CTYPE 设置为默认语言环境”的变体,这似乎是一个非常常见的问题,但我的问题有点奇怪,与我之前发现的任何报告的情况都不匹配。
当我使用 Windows 上的 PuTTY 登录到我的 Linux 服务器后,立即打印此警告。
-bash: warning: setlocale: LC_CTYPE: cannot change locale (en_GB.UTF-8,LANG=en_US.UTF-8): No such file or directory
-bash: warning: setlocale: LC_CTYPE: cannot change locale (en_GB.UTF-8,LANG=en_US.UTF-8)
当我使用 Git Bash 中的命令时也会发生同样的情况ssh
。当我使用 VNC 登录并在 KDE 中打开 Konsole 时,Bash 打开时没有任何这些警告。
我的情况的独特之处在于它尝试设置 LC_CTYPE: 的值en_GB.UTF-8,LANG=en_US.UTF-8
。它看起来像两个连接的字符串。这是怎么发生的!?
这是服务器端的原始输出
$ locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_GB.UTF-8
LC_CTYPE=en_GB.UTF-8,LANG=en_US.UTF-8
LC_NUMERIC="en_GB.UTF-8"
LC_TIME="en_GB.UTF-8"
LC_COLLATE="en_GB.UTF-8"
...
LC_IDENTIFICATION="en_GB.UTF-8"
LC_ALL=
请注意:
1) 除 LC_ALL 外,所有变量均已设置 - 这是正常的吗?
2) LC_CTYPE 具有奇怪的“连接”值
3) 除 LC_CTYPE 外,所有值均带有引号
4) 警告类似,但也抱怨 LC_ALL
我尝试通过~/.profile
在服务器端编辑来修复此问题,方法是附加以下内容:
export LANG=en_GB.UTF-8
export LC_ALL=en_GB.UTF-8
现在,重新登录后,语言环境似乎显示合理的值,并且没有来自语言环境命令的警告:
$ locale
LANG=en_GB.UTF-8
LC_CTYPE="en_GB.UTF-8"
LC_NUMERIC="en_GB.UTF-8"
LC_TIME="en_GB.UTF-8"
LC_COLLATE="en_GB.UTF-8"
...
LC_IDENTIFICATION="en_GB.UTF-8"
LC_ALL=en_GB.UTF-8
我是否应该担心某些值周围没有引号?
但是登录警告仍然存在,仍然en_GB.UTF8,LANG=en_US.UTF-8
从某处拉取:
-bash: warning: setlocale: LC_CTYPE: cannot change locale (en_GB.UTF8,LANG=en_US.UTF-8): No such file or directory
-bash: warning: setlocale: LC_CTYPE: cannot change locale (en_GB.UTF8,LANG=en_US.UTF-8)
Linux 服务器:“openSUSE Leap 15.0”
Windows 客户端 1:PuTTY 0.70
Windows 客户端 2:Git Bash 2.21.0 (MinTTY 终端)
有任何想法吗?
答案1
解决了,谜团解开了。问题出在文件中/etc/locale.conf
。它只有一行奇怪的代码:
LC_CTYPE=en_GB.UTF-8,LANG=en_US.UTF-8
当我将其改为:
LC_CTYPE=en_GB.UTF-8
LANG=en_US.UTF-8
..警告消失了!
看起来像是 openSUSE 错误;很可能是某个系统升级搞砸了这个文件,将行尾变成了逗号。我得到了很好的帮助openSUSE 论坛。
答案2
(我无法发表评论。)
Linux 中的 /etc/ssh/sshd_config 是否有下面一行?
AcceptEnv LANG LC_*