我正試圖創建我的〜/ .ssh / config
文件,以簡化服務器連接上的工作。 kbd> tab kbd>我能夠使用以下文件自動完成主機名:
主機測試主機名HostName 192.168.1.2用戶root
優勝美地上的相同配置具有不同的行為。當我在外殼上鍵入 ssh t
時,選項卡 kbd>不會自動完成主機名。
有人知道優勝美地是否有所更改,現在我需要做點什麼使它工作?
我正試圖創建我的〜/ .ssh / config
文件,以簡化服務器連接上的工作。 kbd> tab kbd>我能夠使用以下文件自動完成主機名:
主機測試主機名HostName 192.168.1.2用戶root
優勝美地上的相同配置具有不同的行為。當我在外殼上鍵入 ssh t
時,選項卡 kbd>不會自動完成主機名。
有人知道優勝美地是否有所更改,現在我需要做點什麼使它工作?
您可以通過 brew安裝 bash-completion
來啟用bash shell補全功能:
brew install bash-completion
然後將以下內容添加到您的〜/ .bash_profile
:
if [-f $(brew --prefix)/ etc / bash_completion];然後。$(brew --prefix)/ etc / bash_completionfi
(編輯: brew tap homebrew / completions )code>自2018年起已棄用。)
我認為Mac的外殼是bash。
您需要完成ssh命令,有關更多詳細信息,請閱讀 mancomplete
_complete_ssh_hosts(){COMPREPLY =()cur =“ $ {COMP_WORDS [COMP_CWORD]}” comp_ssh_hosts =`cat〜/ .ssh / known_hosts | \ cut -f 1 -d''| \ sed -e s /,.*// g | \ grep -v ^#| \ uniq | \ grep -v“ \ [”;貓〜/ .ssh / config | \ grep“ ^ Host” | \ awk'{print $ 2}'`COMPREPLY =($(compgen -W“ $ {comp_ssh_hosts}”-$ cur))返回0} complete -F _complete_ssh_hosts ssh
Don'別忘了您需要 source
文件以獲取要在終端中加載的新命令。或者您可以將此代碼放入.bash_profile
將以下內容複製/粘貼到〜/ .bash_profile
中:
complete -o默認-o nospace -W“ $(/ usr / bin / env ruby -ne'puts $ _。split(/ [,\ s] + /)[1 ..- 1].reject {| host | host.match(/ \ * | \?/)}如果$ _。match(/ ^ \ s * Host \ s + /);'< $ HOME / .ssh / config)“ scp sftp ssh
然後,您需要重新啟動終端或鍵入 source〜/ .bash_profile
(請注意,後者僅在您當前的標籤中有效)。
僅供參考,我不確定如何直接響應納爾遜的回答,因為我還沒有建立足夠的聲譽來對此發表評論,但是在運行El Capitan的計算機上, ^ M
被附加到我的配置文件中的所有主機名上。我必須在 $ IFS
變量中添加 \ r
,或者從第二個的輸出中刪除/替換所有
。最後,我通過添加 \ r
實例。>貓 tr'\ r''\ n'
使該命令鏈看起來像這樣來完成後者:
cat〜/ .ssh / config |\
grep“ ^ Host” |\
awk'{print $ 2}'|\
tr'\ r''\ n'
Nelson的答案(以上)不會告訴您他正在使用哪個macOS版本。
對於macOS 10.14,使用以下命令安裝 bash-completion
後:
brew install bash-completion
安裝程序告訴我將此行添加到我的.bash_profile中(我將其放入.profile中),並且有效:
[[-r“ /usr/local/etc/profile.d/bash_completion.sh”]] &&。“ /usr/local/etc/profile.d/bash_completion.sh”
您可以在/ etc / hosts中添加條目,並在主機名自動完成中使用它們:
“ ssh @” + [TAB]
需要重新啟動系統才能重新加載此文件。