我刚刚安装了 CentOS 6,每当我通过 SSH 远程登录系统时,都会出现以下错误:
-bash: warning: setlocale: LC_CTYPE: cannot change locale (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_US.UTF-8
LC_CTYPE=UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
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=
这可能是什么问题?我该如何解决这个问题?
答案1
在您使用 ssh 的服务器上,您是否通过环境变量设置了语言环境?查看我的 CentOS 6 安装时,我发现唯一受支持的语言环境是en_US.utf8
(使用命令发现locale -a
)。这可能是问题所在吗?
在我的测试中,当我将LC_ALL
环境变量设置为时en_US.UTF-8
,通过 ssh 连接到服务器,我的 locale 命令的输出设置为。这与我在 ssh 之前 POSIX
未设置(即取消设置)变量时的情况相同。LC_ALL
当我将LC_ALL
变量设置为en_US.utf8
或en_US.utf-8
,并通过 ssh 连接到我的 CentOS 6 框时,语言环境的输出与源框上设置的相同。
请注意,我也没有对 UTF 使用大写字母。
答案2
按照此屏幕截图所示,在终端设置>高级中禁用“在启动时设置区域环境变量”即可解决此问题。
注意:如果您使用 iTerm2,您可以在“首选项”>“配置文件”>“终端”中禁用“自动设置区域变量”选项
答案3
简单方法:
添加
LC_CTYPE="en_US.UTF-8"
到/etc/sysconfig/i18n
。
答案4
当我从 Solaris X 登录到 Centos 主机时,我收到了此特定消息。
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
问题来自两个设置:
- 在我的默认系统 ssh_config 中,我要求系统传递这些变量。
发送与语言环境相关的环境变量 SendEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
在我的源主机上,这些设置如下:
源# LANG= LC_CTYPE=fr_FR.UTF-8 LC_NUMERIC=fr_FR.UTF-8 LC_TIME=fr_FR.UTF-8 LC_COLLATE=fr_FR.UTF-8 LC_MONETARY=fr_FR.UTF-8 LC_MESSAGES=fr.UTF-8 LC_ALL=
但是,正如您所看到的,LC_MESSAGES 设置为 fr.UTF-8,这不是我的目标主机上的选项。
DEST#locale -a | grep fr_FR
fr_FR
fr_FR@euro
fr_FR.iso88591
fr_FR.iso885915@euro
fr_FR.utf8
该问题已在源主机上强制解决,在 .bash_profile 上:# export LC_ALL=fr_FR.UTF-8 export LANG=fr_FR.UTF-8
我可以通过要求我的目标主机不要从任何 ssh 连接中获取此变量来解决这个问题(通常,或者通过为我的用户创建一个语言环境 ssh_config 文件)