使用“known-hosts-files”完成“zsh”ssh 命令补全

使用“known-hosts-files”完成“zsh”ssh 命令补全

这个问题最初询问的是,这是不正确的。由于我无法将其移动到 serverfault,因此我重新询问。

我正在尝试配置命令的制表符补全sshzsh使用额外的 known_hosts文件(不在 中~/.ssh)。我说的附加意思是我仍然想使用“默认”known_hosts文件。

目前,当我点击TABssh,我会得到一个主机列表,这些主机似乎来自~/.ssh/known_hosts和 (可能) /etc/hosts。我还想获取 中列出的主机~/other/path/known_hosts

我在网上找到了很多资料,但不知何故,我无法理解这一点。zsh 网站例如列出一个style听起来known-hosts-files非常很有希望。而且当我看看它是如何使用的看起来很中肯。

但我不知道如何使用known-hosts-files

例如,我在我的 中尝试了以下内容.zshrc

zstyle ':completion:*:*:ssh:*:*' known-hosts-files '~/other/path/known_hosts'

并且进行了许多修改,但都无济于事。

为了达到更好的效果,我还添加了(在我的.zshrc):

zstyle ":completion:*:commands" rehash 1

但这并没有改变任何事情。

一个较旧的答案这里是 serverfault 和另一个答案)解决同样的问题,但我不完全理解它们,而且似乎known-hosts-files正是我想要的吗?

如果有必要的话,我还使用 Oh-my-zsh......

答案1

好吧,我终于找到了罪魁祸首:引号。

当设置known-hosts-files为单个文件时(如我的示例),可以使用引号,但不与~

将其添加到.zshrc预期工作(macOS):

zstyle ':completion:*:*:ssh:*:*' known-hosts-files 'Users/<username>/other/path/known_hosts'

事后看来,这似乎是合理的:设置known-hosts-files列表文件,根本不要使用引号~然后就可以再次使用)。

因此,以下方法可行:

zstyle ':completion:*:*:ssh:*:*' known-hosts-files /etc/ssh/ssh_known_hosts ~/.ssh/known_hosts ~/other/path/known_hosts

这似乎与 shell 将引用的文本解释为文字单个字符串有关......自然......

相关内容