如果有必要的话我会运行 MacOS
我是终端新手,在大学实验室工作,我们有一个服务器,我们可以通过笔记本电脑 ssh 进入该服务器。我使用 ZSH 作为 shell,除了安装 git 之外没有其他插件。我的问题是,每当我使用 ssh 登录时在 username@ 后按下 tab 键时,我过去使用过的几个网站就会弹出来。这真的很尴尬,我在网上找不到任何相关信息。我已经完全重置了我的终端,删除了 zsh 并卸载了 brew,但问题仍然存在。如果有人知道解决方案,我将不胜感激。
答案1
在 PC(包括 Mac)上重新安装系统范围安装的程序通常不会删除其用户级设置或数据。
ZSH 和 Bash 都有用于各种命令的 tab 补全的特殊情况。补全ssh
或补全时,ssh user@
它们通常会从~/.ssh/known_hosts
和~/.ssh/config
,这两者都是 OpenSSH 的用户数据文件;它们不属于 ZSH 也不属于 Brew,并且在重新安装它们时不会被触及。
答案2
我找到了答案:
我使用一款名为 self-control 的软件作为内容拦截器,该软件会写入我的 /private/etc/hosts 文件,并写入被 self-control 拦截的网站。oh-my-zsh 会在 ssh @ 后按下 tab 键时从 etc/hosts 文件中读取以提取“已知主机”。为了解决这个问题,我在 ~/.zshrc 文件底部添加了这个
zstyle -e ':completion:*:hosts' hosts 'reply=(
${=${${(f)"$(cat {/etc/ssh_,~/.ssh/known_}hosts(|2)(N) 2>/dev/null)"}%%[#| ]*}//,/ }
${=${${${${(@M)${(f)"$(cat ~/.ssh/config 2>/dev/null)"}:#Host *}#Host }:#*\**}:#*\?*}}
)'
我在这里找到了这个命令: 停止 zsh 在自动完成中整合 /etc/hosts