我有一个命令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
它只会自动完成所需扩展名的文件名,而不是目录。
答案1
只需添加-o plusdirs
也对命令进行自动完成操作,以便自动完成将尝试将目录名称添加到先前的结果中(忽略模式匹配)
complete -f -o plusdirs -X '!*.@(mp4|mkv)' play
!
否定完成,这意味着自动竞争将忽略除我们指定的匹配模式之外的完成结果*.@(mp4|mkv)
;@
告诉自动完成仅匹配至少一种给定模式;这@(pattern-list)
被称为 Bash 的扩展全局变量。我们*.+(pattern-list)
也可以在这里使用 glob 。
要强制完成命令的文件和目录名称play
,并且仅针对给定模式进行扩展,请执行以下操作:
complete -d -X '!*@(mp4|mkv)' -f -X '!*.@(mp4|mkv)' play
下面也应该有效:
complete -d -f -X '!*.@(mp4|mkv)' play