[英]Bash complete with "@"-sign
我正在嘗試為 scp 創建一個自動完成腳本。 該腳本從 my.ssh/config 文件中讀取用戶和主機名 My.ssh/config 文件如下所示:
Host host1
HostName host1
User userA
port 22
Host host2
HostName host2
User userB
port 22
Host host3
HostName host3
User userB
port 22
我的.autocomplete_scp.sh 文件是:
# SSH
function _scp_completion() {
pcregrep -o -M 'HostName [a-zA-Z.]+[\n\t\s]+User [a-zA-Z]+'
$HOME/.ssh/config | awk 'NR % 2 == 1 { o=$2 ; next } { print $2"@"o}'
}
complete -W "$(_scp_completion)" scp
我在我的 bashrc 中獲取這個文件。
現在,當我鍵入userA
並按Tab時,自動完成功能會給我userA@host1
。 當我鍵入userB
並點擊Tab時,自動完成功能會給我userB@
,但我無法獲得完整的字符串( userB@host2
或userB@host3
)。
當我鍵入userA@h
並按兩次Tab按鈕時,它也不起作用。 所以它似乎因為@
符號而卡住了。 (當我從 _scp_completion 函數中刪除@
符號時,它工作正常。)
有解決這個問題的想法嗎? 謝謝!
使其工作的簡單方法是從$COMP_WORDBREAKS
中刪除'@'
否則 Bash 將自行處理@
。 你可以這樣嘗試:
COMP_WORDBREAKS=${COMP_WORDBREAKS//@}
complete -W 'userA@host1 userB@host2 userB@host3' scp
根據 bash 文檔:
COMP_WORDBREAKS
readline庫在執行單詞完成時將其視為單詞分隔符的字符集。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.