ssh 登录导致我的 zsh 中出现重复字符

ssh 登录导致我的 zsh 中出现重复字符

我在 Mac 上使用 iTerm2 和 zsh v5.7.1。当我使用“ssh”从本地计算机登录到远程计算机时,大多数字符都会在我输入时在提示符下重复。使用 Ctrl-L 清除行会显示正确输入的输入。我确信这是我的提示符使用 UTF-8 和 Esc 字符的问题。如果我在登录后立即运行“bash”,我就可以访问没有特殊字符的提示符,因此没有重复字符。我的标准提示符是 Powerlevel10K。TTY
=/dev/ttys000
TERM=xterm-256color-italic

例子:

buckley@dusky   ~  eecechecho ""EExxrrtr x xttrraa cchhaaaa arraaccttrt teerrss" buckley@dusky   ~  echo "额外字符"

当我在本地使用“远程”计算机时,我显然看不到这些额外的字符,只有当我通过“ssh”进入时才能看到。

我希望有人可以指出有问题的文件或命令,以便“ssh”能够正确识别远程登录环境和提示。

答案1

为了防止这种奇怪的行为,您必须将LC_ALL远程计算机上的环境变量设置为与本地计算机相同的值。要检查您的设置LC_ALL,请在本地计算机上输入:

echo $LC_ALL

在我的例子中,我的系统返回了C.UTF-8。要仅为单个 ssh 会话设置变量,只需在远程会话中输入:

export LC_ALL=C.UTF-8

但是,如果您希望一次性完成此操作,请在.zshrc远程计算机上的文件中的某个位置添加此行。

如果由于某种原因它仍然没有帮助,请尝试将LANGLC_CTYPE设置为与相同的值LS_ALL。 在我的例子中:

export LANG=C.UTF-8
export LC_CTYPE=C.UTF-8

答案2

您的提示符包含 Unicode 字符,但LC_CTYPE远程计算机上的提示符不是 UTF-8。您可以通过输入 来确认这一点locale | grep LC_CTYPE

要解决此问题,首先需要确保远程计算机上安装了所需的语言环境。键入locale -a以查看已安装语言环境的列表。如果缺少所需的语言环境(可能与您在本地计算机上使用的语言环境相同),则需要安装它。执行此操作的具体命令取决于您的操作系统和远程计算机的发行版。

然后,您需要指示 sshd 接受来自客户端的区域设置环境变量(man sshd_config并搜索AcceptEnv)或手动设置LANGUAGE远程~/.zshrc机器的区域设置环境变量。

相关内容