Ssh
如何在 zsh 上編輯 ssh 的命令完成?
我想在 zsh 上設置命令完成以在我鍵入後顯示主機名
ssh [TAB]
從我的 .ssh/config 文件中取出名稱(最好從 known_hosts 和 /etc/hosts 以及其他任何有意義的地方)並呈現一個列表。
它目前做了一些這樣的事情,但是
- 它根本不使用 .ssh/config
- 它首先需要一個使用者名,即使使用 .ssh/config 不需要輸入使用者名
- 它顯示了多個列表(可能一個來自 known_hosts,另一個來自 /etc/hosts,但我尚未驗證)
所以我想在輸入 ssh 後在(最好是單個)列表中包含已知的使用者名和已知的主機名
$$ TAB $$ (我在Google之前來到這裡是因為 1)它會導致答案儲存在這裡,並且 2)它可能更有效。如果沒有其他人回答,我會尋找答案。)
這是我的相關部分
.zshrc
。它自 2002 年以來就沒有改變過,所以我今天可能會用不同的方式來寫它,但它仍然可以從~/.ssh/config
and完成主機名~/.ssh/known_hosts
(如果HashKnownHosts
是關閉的 - 它在那些日子裡不存在)。h=() if [[ -r ~/.ssh/config ]]; then h=($h ${${${(@M)${(f)"$(cat ~/.ssh/config)"}:#Host *}#Host }:#*[*?]*}) fi if [[ -r ~/.ssh/known_hosts ]]; then h=($h ${${${(f)"$(cat ~/.ssh/known_hosts{,2} || true)"}%%\ *}%%,*}) 2>/dev/null fi if [[ $#h -gt 0 ]]; then zstyle ':completion:*:ssh:*' hosts $h zstyle ':completion:*:slogin:*' hosts $h fi