OS X终端:-bash:警告:setlocale:LC_CTYPE:无法更改语言环境(UTF-8):无此类文件或者目录
通过OS X ssh Terminal应用程序连接到任何远程Linux/Unix/BSD服务器或者计算机时,出现以下错误:
Last login: Wed Mar 26 08:45:36 2014 from 1.2.3.4
-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory
如何解决此错误? 此警告或者错误是OpenSSH服务器和OS X ssh终端客户端问题的一部分。可以使用多种方法进行修复。
了解LC_*环境变量
在远程服务器上执行以下命令以显示Glibc支持的所有语言环境:
$ locale -a
接下来,执行以下命令以在本地系统(基于OSX/Unix/Linux的桌面)上显示设置:
printenv echo "$LC_CTYPE"
输出示例:
UTF-8
上面的命令显示国家和语言名称,以及语言环境使用的字符编码。
您的本地ssh客户端正在将您的LC_*环境变量发送到远程sshd服务器。
换句话说,SSH还将尝试在删除服务器上设置您在本地OSX系统上设置的每个LC_*变量。
这是此类问题的示例:
警告setlocale lc_ctype无法更改语言环境(utf-8)
修复LC_CTYPE:在Linux/OS X上无法更改语言环境(UTF-8)错误
可以如下修复。
方法1:如果您在OS X上使用终端应用程序
如果您使用的是终端应用程序,则单击
Terminal > Preferences > Select Terminal type such as Basic (default) > Advanced tab
确保未选中启动时设置区域设置环境变量,如下所示:
通过取消选中"启动时设置区域设置环境变量"来修复OS X终端
这是MacOS X v10.11.6的另一个屏幕截图:
在OS X EI Caption上取消在启动时设置区域设置环境变量复选框
您必须关闭所有ssh会话并重新启动终端应用程序。
方法#2:防止OpenSSH客户端在OS X/Linux/Unix桌面上发送LC_ *变量
编辑/etc/ssh/ssh_config或者/etc/ssh_config文件,执行:
$ sudo vi ~/.ssh/config
删除或者注释掉如下:
#SendEnv LANG LC_*
保存并关闭文件。
方法3:在远程服务器上安装所需的语言环境
最后,您可以使用localedef命令安装所需的语言环境,或者考虑在语言环境/远程系统中选择其他语言环境,来解决此问题:
# localedef -i en_US -f UTF-8 en_US.UTF-8