我在各种论坛上发现了许多问题,Mac 用户locale
在通过 SSH 登录 Linux 系统时抱怨错误LC_CTYPE=UTF-8
设置不正确。
更详细地说,MacOS 上的 shell 似乎设置了这个值,然后(如果您在终端中启用了该选项等)LC_*
当您 SSH 进入时,您的本地变量会导出到远程系统。
Linux 坚持LC_CTYPE
需要将其设置为有效的语言环境(有时您可以localegen
在 Linux 系统上以管理员身份修复此问题),但UTF-8
首先不是语言环境。
我的主要问题是,这是 MacOS 中的错误吗?还是 Linux 坚持需要将变量设置为完全指定的语言环境名称是错误的?
其次,为了能够争论哪一个是正确的以及为什么,这是在哪里指定的?
第三,这些 Mac 用户(包括我自己)是否可以或应该做些不同的事情?
明显的解决方法是放置类似的东西
LC_CTYPE=en_US.UTF-8
在您的 中.bash_profile
,但这显然只能为您的个人帐户解决它,并硬编码一个可能与您的其他locale
设置一致或不一致的值。
我没有详细说明谁是“对还是错”——但同样对这个问题感到恼火。对此的一些解决方案:
AcceptEnv LC_*
更改/禁用/etc/ssh/sshd
.profile
/etc/bash*
或/etc/profile
alias ssh="LC_CTYPE=\"${LANG}\" ssh"
在.bashrc
//.profile
无论哪里.bashrc
与/.profile
...中的服务器端相同所以,最后我最终在服务器上创建
mac-locale-fix.sh
了/etc/profile.d
(在我的情况下是 raspian),其中包含以下行:希望这对其他人有帮助...
基本问题是
环境变量的POSIX页面显示了其他人认为 macOS 配置不正确的原因:
也就是说,他们假设 POSIX 规定了语言环境设置的语法。粗心的读者会假设 POSIX 为环境变量定义了允许的形式,因此codeset值是可选的,而不是替代language。但是最后一个“可能”打开了一罐蠕虫,实际上祝福了这种解释上的差异。如果 Apple 想要提供不完全遵循该模式的有效语言环境,Apple 可以为所欲为。
@tripleee 建议Locale页面提供了更好的信息,但这几乎完全是对语言环境定义的讨论,而不是为互操作性提供指导(即 POSIX 的表面目标)。
这两个页面都没有解决可用区域设置的差异(例如“.utf8”与“.UTF-8”)。如 POSIX 页面所述,这些是依赖于实现的。这使用户唯一的解决方案是自己确定本地和远程系统上支持哪些区域设置,并且(此处的 ssh 行为)确定如何“兼容地”在远程系统上设置这些设置。