You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mac终端使用SSH配置自动补全主机名时追加$'\r'的解决方法

问题现象

我的终端运行截图
触发SSH主机名自动补全时,命令末尾会自动追加多余的$'\r'字符,补全效果如下:

ssh dev$'\r'

对应SSH配置示例:

Host dev
HostName xxxxx
User xxxx
Port xxxx

运行环境为oh-my-zsh终端框架,补全后需要手动删除该异常字符才能正常执行命令。


解决方案

这个问题的核心原因是SSH相关配置/补全缓存文件使用了Windows风格的CRLF(\r\n)换行符,zsh补全模块解析主机名时,会把行尾不可见的回车符\r识别为主机名的一部分,补全时就会带出这个字符,shell转义显示为$'\r'。

按以下步骤操作即可修复:

  • 转换SSH相关文件的换行格式为Unix标准的LF格式,执行命令:
    sed -i 's/\r$//' ~/.ssh/config ~/.ssh/known_hosts
    
  • 清理oh-my-zsh的补全缓存,旧缓存里存的错误主机名记录会被一并清除:
    rm -f ~/.zcompdump*
    
  • 完全退出当前终端会话,重新打开zsh即可,补全时不会再出现多余的$'\r'后缀。
  • 如果执行完上述操作问题仍存在,检查.zshrc中自定义的SSH主机解析脚本、或其他第三方补全规则文件是否为CRLF换行,用同样的sed命令替换掉文件末尾的\r字符即可。

内容的提问来源于stack exchange,提问作者braveKnight

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 06:06:22