如何使用 bash 命令完成以便仅完成特定目录中的文件?

如何使用 bash 命令完成以便仅完成特定目录中的文件?

假设我有一个 bash 函数specialcat,该cat函数位于 ~/Special 目录中

specialcat () {
    cat ~/Special/$1
}

假设 ~/Special 目录设置如下:

mkdir ~/Special
echo This is the first special file > ~/Special/firstfile
echo This is the second special file > ~/Special/secondfile

Specialcat 函数的用法如下:

> specialcat firstfile
This is the first special file

我想启用参数完成,以便

> specialcat firstf[TAB]

产生

> specialcat firstfile

无论当前工作目录是什么以及那里有什么文件。

这是我迄今为止的尝试

_options_specialcat () {
    COMPREPLY=( $(compgen -W "$(ls ~/Special)") )
}

complete -F _options_specialcat specialcat

这导致

> specialcat firstf[TAB]
firstfile   secondfile  
> specialcat firstf

也就是说,在部分文件名上按 Tab 键将显示文件列表,但不会完成命令。

如何改变我的_options_specialcat功能以产生所需的行为?

答案1

您需要按当前参数过滤列表,因此:

COMPREPLY=( $(compgen -W "$(ls ~/Special)" -- "$2") )

相关内容