OS X终端:-bash:警告:setlocale:LC_CTYPE:无法更改语言环境(UTF-8):无此类文件或者目录

时间:2020-01-09 10:42:57  来源:igfitidea点击:

通过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