我是一个流浪者的初学者。我尝试使用 vagrant 在我的计算机上创建一个虚拟机(cent os 6)。当我运行 vagrant ssh 时,它会打印此警告:
-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory
当我运行
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=
我搜索了一个小时,但仍然无法解决该问题。
对于 CentOS 或 Amazon AMI Linux,请将这些行添加到
/etc/environment
(如果不存在,则创建它):
LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8
要通过 SSH 控制台编辑此文件,请尝试
sudo nano /etc/environment
编辑
对于 Debian 相关发行版(Ubuntu 等),您应该检查
/etc/default/locale
是否为空。这就是在 dpkg-reconfigure locales
中选择 None的结果,如果用户通过 SSH 访问,建议使用该选项(请参阅 Debian Wiki)。
/etc/environment
自 Debian Lenny (5.0) 起已弃用。
您可以将
LC_ALL
设置为 C
,例如
export LC_ALL=C
或连接到虚拟机之前的前缀:
LC_ALL=C ssh vagrant@localhost
注意:您还可以考虑为 SSH 配置 (
SetEnv
) 设置 man ssh_config
,如下所述。
要使其永久化,您可以在您的
~/.ssh/config
中添加以下规则:
Host *
SetEnv LC_ALL=C
假设您的服务器在
/etc/ssh/sshd_config
中收到以下行:
AcceptEnv LANG LC_*
另请检查:
man ssh_config
和 man sshd_config
。
在 bashrc 的 root 下添加以下内容:
vi /root/.bashrc
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
然后重新启动系统。
这可能是由您的终端设置引起的。
对于 iTerm2,取消选中此设置:
Profiles -> Terminal -> "Set locale variables automatically"
.
上下文:如果您在无法修改区域设置的共享节点上工作,则该警告可能是由您的终端尝试(但失败)更改区域设置引起的。
就我而言,在 Slackware64 14.1 上我收到错误:
-bash: warning: setlocale: LC_ALL: cannot change locale (en_DK.UTF-8)
原来是缺少glibc包。
安装软件包:
glibc-2.17-x86_64-11_slack14.1
glibc-i18n-2.17-x86_64-11_slack14.1
问题解决了。
我的/etc/profile.d/lang.sh包含:
export LANG=en_DK.UTF-8
export LANGUAGE=en_DK.UTF-8
export LC_ALL=en_DK.UTF-8
export LC_COLLATE=C
享受吧。
我使用的是 macOS。我将以下内容放入我的
~/.ssh/config
:
Host *
SetEnv LC_CTYPE=
在我看来,这是改变 ssh 配置的侵入性最小的方法。
请尝试下一步:
localedef -i en_US -f UTF-8 en_US.UTF-8
对于那些在 MacOS 中遇到此错误的用户: 打开 /etc/ssh/ssh_config 文件(在您喜欢的任何编辑器中,我在示例中使用了 vi 编辑器)
sudo vi /etc/ssh/ssh_config
(enter sudo password)
在此文件中,注释掉以下行:
SendEnv LANG LC_*
(评论时使用#:
#SendEnv LANG LC_*
)
关闭文件。关闭并重新打开终端并再次尝试 ssh 命令。
要详细了解该问题,您可以查看此技术博客: https://www.cyberciti.biz/faq/os-x-terminal-bash-warning-setlocale-lc_ctype-cannot-change-locale/
已解决:我在 Amazon ECS Linux 2 上遇到此错误:
warning: setlocale: LC_CTYPE: cannot change locale (en_US.UTF-8): No such file or directory
warning: setlocale: LC_COLLATE: cannot change locale (en_US.UTF-8): No such file or directory
warning: setlocale: LC_MESSAGES: cannot change locale (en_US.UTF-8): No such file or directory
warning: setlocale: LC_NUMERIC: cannot change locale (en_US.UTF-8): No such file or directory
warning: setlocale: LC_TIME: cannot change locale (en_US.UTF-8): No such file or directory
manpath: can't set the locale; make sure $LC_* and $LANG are correct
在阅读了一堆 Stack Overflow 帖子和文章后,我了解到该问题与缺少区域设置/语言包有关,并按如下所述修复了它。
原因: 我在尝试节省 Cloud9/T3 实例上的空间时一直在删除包。 (看来我删太多了!哎呀。)
解决方案:
安装以下软件包:
然后更新您的本地定义,如下所示:
sudo yum -y install glibc-locale-source glibc-langpack-en
sudo localedef -i en_US -f UTF-8 en_US.UTF-8
感谢https://stackoverflow.com/questions/58304278/how-to-fix-character-map-file-utf-8-not-found
为我工作!希望这对您有帮助。