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]開始できる引数は2つだけなので、「autocomplete」コマンドを入力してタブを完成させます(現在の作業ディレクトリに名前が似ているファイルがないとします)。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

おすすめ記事