簡體   English   中英

帶有“@”符號的 Bash

[英]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@host2userB@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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM