題:
〜/ .ssh / config中定義的主機的製表符補全在優勝美地上不再起作用
RikyTres
2015-01-20 15:39:48 UTC
view on stackexchange narkive permalink

我正試圖創建我的〜/ .ssh / config 文件,以簡化服務器連接上的工作。 kbd> tab kbd>我能夠使用以下文件自動完成主機名:

 主機測試主機名HostName 192.168.1.2用戶root  

優勝美地上的相同配置具有不同的行為。當我在外殼上鍵入 ssh t 時,選項卡 kbd>不會自動完成主機名。

有人知道優勝美地是否有所更改,現在我需要做點什麼使它工作?

六 答案:
Danny Armstrong
2015-10-05 20:59:48 UTC
view on stackexchange narkive permalink

您可以通過 brew安裝 bash-completion 來啟用bash shell補全功能:

  brew install bash-completion 

然後將以下內容添加到您的〜/ .bash_profile

  if [-f $(brew --prefix)/ etc / bash_completion];然後。$(brew --prefix)/ etc / bash_completionfi  

Source

(編輯: brew tap homebrew / completions )code>自2018年起已棄用。)

+1 :)在安裝bash-completion-1.3.3.high_sierra時,它告訴我應該添加```[-f / usr / local / etc / bash_completion] &&。/ usr / local / etc / bash_completion`您能否詳細說明應該使用哪個(或您的)版本?為什麼?
nelson
2015-01-20 18:23:46 UTC
view on stackexchange narkive permalink

我認為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。為什麼在Maveriks中我不需要這樣做?
不,我剛剛測試過。默認情況下,我無法在Mavericks中做到這一點。
`comp_ssh_hosts = $(awk -F,'FNR == NR &&!/ ^#| \ [/ {field = $ 1} FNR!= NR && / ^ Host / {field = $ 2} {hosts [field]} END {(主機中的主機){打印主機}'“ $ HOME / .ssh /已知主機”“ $ HOME / .ssh / config”)`
快速提示,如果您使用製表符而不是空格,則此命令將找不到您的主機。因此,如果您縮進.ssh / config文件,請注意這一點。
beef_boolean
2016-03-29 07:35:09 UTC
view on stackexchange narkive permalink

來自有關MacWorld的這篇文章

將以下內容複製/粘貼到〜/ .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 (請注意,後者僅在您當前的標籤中有效)。

沒有為我工作。但是https://apple.stackexchange.com/a/168168/136365做到了。我認為最好避免依賴於紅寶石這樣的事情。
Ian Bui
2016-10-10 22:52:26 UTC
view on stackexchange narkive permalink

僅供參考,我不確定如何直接響應納爾遜的回答,因為我還沒有建立足夠的聲譽來對此發表評論,但是在運行El Capitan的計算機上, ^ M 被附加到我的配置文件中的所有主機名上。我必須在 $ IFS 變量中添加 \ r ,或者從第二個的輸出中刪除/替換所有 \ r 實例。>貓。最後,我通過添加 tr'\ r''\ n'使該命令鏈看起來像這樣來完成後者:

  cat〜/ .ssh / config |\
        grep“ ^ Host” |\
        awk'{print $ 2}'|\
        tr'\ r''\ n'
 
0xCAFED00D
2020-02-03 20:50:51 UTC
view on stackexchange narkive permalink

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”
 
lukdz
2018-05-06 12:34:01 UTC
view on stackexchange narkive permalink

您可以在/ etc / hosts中添加條目,並在主機名自動完成中使用它們:

 “ ssh @” + [TAB]
 

需要重新啟動系統才能重新加載此文件。



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...