私のコマンド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