这个问题最初询问的是,这是不正确的。由于我无法将其移动到 serverfault,因此我重新询问。
我正在尝试配置命令的制表符补全ssh
以zsh
使用额外的 known_hosts
文件(不在 中~/.ssh
)。我说的附加意思是我仍然想使用“默认”known_hosts
文件。
目前,当我点击TAB
后ssh
,我会得到一个主机列表,这些主机似乎来自~/.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 将引用的文本解释为文字单个字符串有关......自然......