我我的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
。我们假设该文件包含以下条目:
[email protected]
[email protected]
所需的行为如下:我键入scp alex@ [tab]
并制表符补全“自动完成”命令,因为只有两个可能的参数以 开头(假设没有与当前工作目录中的名称类似的文件。)。scp [email protected].
alex@
我在当前实现中得到的行为如下:我键入scp alex@ [tab]
并且制表符补全不会完成任何内容,但会在命令下方列出每个可能的参数。
我怎样才能获得所需的行为?
答案1
这对我有用:
_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