触发器列出 bash 函数中的所有完成行为

Trigger list all completions behavior in a bash function

我有以下方便的小脚本,用于搜索别名和 bash 函数。我想将它扩展到 bash 自动完成,即在我的 PATH 中找到所有二进制文件。

想想看,std 自动完成行为也会找到别名和函数。但是,如果 只是 一个 PATH 二进制列表,那对我也有好处。

即如何在 bash 函数中触发 list-all-completions 行为?

(venv) me@backups$  I entered a tab here
Display all 3093 possibilities? (y or n)
!                                         libocijdbc12.dylib
./                                        libons.dylib
2to3                                      liboramysql12.dylib
2to3-                                     libpng-config
.....

这是我目前使用的 bash 脚本。


_getfilter(){

    if [ -z "" ]; then
        r_getfilter='.+'
    else
        r_getfilter=""
    fi
}

findcommands(){
    #hardcoding for now
    #_getfilter 
    r_getfilter='^p'

    printf "\nfunctions:\n"
    declare -F | cut -c12- | egrep "$r_getfilter"

    printf "\naliases:\n"
    alias | cut -d '=' -f 1 | cut -d ' ' -f 2 | egrep "$r_getfilter"

    printf "\nautocomplete:\n"
    <what do I use here?> | egrep "$r_getfilter"
}

我宁愿不必在 PATH 中搜索我允许的可执行文件的各个目录。如果这是唯一的解决方案,我可能不会打扰。

当前的 findcommands 实现适用于 Linux 和 Mac。我的首要任务是让它在我的 Mac 上运行,Linux 也是一个不错的选择。

键入似乎相关的 completecompgen,显示没有输出。 man 也没什么好说的。

您正在寻找 compgen。

$ compgen -c
ffmpeg
la
ll
man
if
then
else
elif
fi
case
...