我有一个简单的 bash 函数,基本上是一个围绕 scp 的包装器。调用使用
copytomachine <Machine> <File>
Run Code Online (Sandbox Code Playgroud)
我已经设置了一些简单的自动完成,这样当我输入
copytomachine <TAB><TAB>
Run Code Online (Sandbox Code Playgroud)
它向我展示了可用机器的列表,目前只是一个硬编码的序列,这对我的需求来说很好。
但是,如果我输入
copytomachine BUILD_SERVER <TAB><TAB>
Run Code Online (Sandbox Code Playgroud)
我希望它为我提供目录中的文件列表,并能够自动完成它们的路径等。但是,我不希望将此文件列表呈现给我的第一个参数(机器名称)。
我当前的完成脚本如下所示:
_machines_completions()
{
local opts
opts="BUILD_SERVER TEST_SERVER LOCAL_MACHINE"
COMPREPLY=( $(compgen -W "${opts}" -- ${COMP_WORDS[COMP_CWORD]}) )
return 0
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以建议我如何修改它以允许我为参数 1 的这些定义的机器名称和参数 2 的文件名的制表符完成?
由于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
}
Run Code Online (Sandbox Code Playgroud)
-o default
将要:
如果 compspec 未生成匹配项,则使用 Readline 的默认文件名完成。
归档时间: |
|
查看次数: |
1800 次 |
最近记录: |