我在 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
远程计算机上的文件中的某个位置添加此行。
如果由于某种原因它仍然没有帮助,请尝试将LANG
其LC_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
机器的区域设置环境变量。