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
相关产品推荐
相关产品推荐

