假设我有一个名为“foo”的命令,它接受一个参数(“加密”或“解密”),然后是一个文件列表。我想编写一个 bash 完成脚本来帮助处理第一个参数,然后为其他参数启用标准文件完成。我能来的最接近的是:
complete -F _foo foo
function _foo()
{
local cmds cur
if [ $COMP_CWORD -eq 1 ]
then
cur="${COMP_WORDS[1]}"
cmds=("encrypt decrypt")
COMPREPLY=($(compgen -W "${cmds}" -- ${cur}) )
else
COMPREPLY=($(compgen -f ${COMP_WORDS[${COMP_CWORD}]} ) )
fi
}
这会正确执行第一个参数,并将从当前目录中为后续的文件选择一个文件名。但是假设当前目录包含一个子目录栏,其中包含一个文件 baz.txt。输入 ba-TAB-TAB 后,补全结果为“bar”(“r”后面的空格),并准备好选择下一个参数。我想要的是标准的 bash 补全,结果是“bar/”(斜杠后没有空格),准备在子目录中选择一个文件。有没有办法得到它?