我有一个命令play
,它接受带有扩展名mp4
或mkv
作为参数的文件。
我创建了一个play_completion.sh
文件/etc/bash_completion.d/
我想要命令play
自动完成目录和扩展名的文件名mp4
或mkv
只有。我在这个问题上寻求帮助,但没有运气,bash 自动完成的文档是压倒性的。
到目前为止我有这个..
complete -f -X '!*.@(mp4|mkv)' play
但是在我使用它获取它之后,source /etc/bash_completion.d/play_completion.sh
它只会自动完成所需扩展名的文件名,而不是目录。
只需将
-o plusdirs
自动完成操作也添加到命令中,以便自动完成将尝试将目录名称添加到先前的结果(忽略模式匹配)!
否定完成,这意味着自动竞争将忽略我们指定的匹配模式以外的完成结果*.@(mp4|mkv)
;@
告诉自动完成仅匹配至少一个给定模式;这@(pattern-list)
被称为 Bash 的扩展 Glob。我们也可以*.+(pattern-list)
在这里使用 glob。要强制完成
play
命令的文件和目录名称,并且仅针对给定模式进行扩展,请执行以下操作:下面也应该工作: