Bash

bash 自動完成功能不起作用,無法“完成”

  • February 6, 2013

我的bashrc.我有一個 bash 完成的命令,scp實現如下

function _scp_complete
{
 COMPREPLY=""
 COMPREPLY+=( $(cat ~/.ssh_complete ) )
 COMPREPLY+=( $( find . ! -name . -prune -type f ) )
}
complete -F _scp_complete scp

這個想法是,當按下時,scp [tab]我會看到目前目錄中的所有文件以及文本文件中列出的單詞~/.ssh_complete。假設此文件包含以下條目:

alex@192.0.0.1
alex@192.0.0.2

所需的行為如下:我鍵入scp alex@ [tab]並製表符完成“完成”命令scp alex@192.0.0.自動,因為只有兩個可能的參數以開頭alex@(假設沒有與目前工作目錄中的文件名稱相似的文件。)。

我在目前實現中得到的行為如下:我鍵入scp alex@ [tab]並且製表符完成沒有完成任何事情,但在命令下方列出了每個可能的參數。

如何獲得所需的行為?

這對我有用:

_foo() 
{
 local cur
 COMPREPLY=()
 cur=${COMP_WORDS[COMP_CWORD]}
 opts=""
 while read line           
 do           
   opts+=" $line"
 done < ~/.ssh_complete
 opts+=" "
 opts+=$(find . ! -name . -prune -type f)
 case "$cur" in
   *)
   COMPREPLY=( $( compgen -W '$opts' -- $cur ) );;
 esac

 return 0
}

complete -F _foo scp

引用自:https://unix.stackexchange.com/questions/63900