デフォルトでは、scpを囲むラッパーである単純なbash機能があります。電話してご利用ください
copytomachine <Machine> <File>
簡単なオートコンプリート設定があり、入力するとき
copytomachine <TAB><TAB>
これは利用可能なシステムのリストを提供します。現在ハードコーディングされているシーケンスだけで十分です。
入ると
copytomachine BUILD_SERVER <TAB><TAB>
ディレクトリ内のファイルのリストを提供し、そのパスなどを自動補完できるようにしたいです。ただし、最初のパラメータ(コンピュータ名)に対してこのファイルのリストを指定したくありません。
現在完了スクリプトは次のとおりです。
_machines_completions()
{
local opts
opts="BUILD_SERVER TEST_SERVER LOCAL_MACHINE"
COMPREPLY=( $(compgen -W "${opts}" -- ${COMP_WORDS[COMP_CWORD]}) )
return 0
}
パラメーター 1 で定義されたコンピューター名に対してタブの完了を実行し、パラメーター 2 のファイル名に対してタブの完了を実行できるように変更する方法を教えてください。
答え1
COMP_CWORD
単語番号なので、その値をテストできます。
_machines_completions()
{
local opts
opts="BUILD_SERVER TEST_SERVER LOCAL_MACHINE"
case $COMP_CWORD in
1)
COMPREPLY=( $(compgen -W "${opts}" -- "${COMP_WORDS[COMP_CWORD]}") )
;;
2)
COMPREPLY=( $(compgen -o default -- "${COMP_WORDS[COMP_CWORD]}") )
;;
esac
return 0
}
-o default
する:
compspec が一致するエントリを生成しない場合、Readline のデフォルトのファイル名補完が使用されます。
答え2
ファイル名のデフォルトの完成動作が必要な場合は、を実行してくださいcompopt -o default
。
もう一つの答えはCOMPREPLYをに設定することを提案しますcompgen -o default
。これは似ていますが、まったく同じ動作ではありません(違いを見るには、ディレクトリ名の自動補完を試してください)。