bash 自动完成不起作用,不“完成”

bash 自动完成不起作用,不“完成”

我我的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

相关内容