如何以编程方式查询给定string的bash完成

我想问一下bash是如何完成一个string的,就好像我已经在shell中敲入了一个string一样。 例如,如果我input

ls /[TAB][TAB] 

我看到/可能完成ls命令的文件和目录列表。 我怎样才能问bash如何完成“ls /”而不用打字和打标签? 我想要的东西是:

 query_complete 'partial command line string' 

我阅读完整和compgen手册页,但不知道如何与他们做。

注意:'ls /'不是我感兴趣的实际命令,只是一个例子。 我正在寻找一个代表部分命令行的任意string的通用解决scheme。

你可以尝试:

 compgen -o default / 

显然,令人敬畏的WM有一个巧妙的小技巧得到这一点。

https://stackoverflow.com/questions/3520936/accesssing-bash-completions-for-specific-commands-programmatically

但我似乎无法正常工作。 让我知道如果你有更好的运气。

你可以使用一个使用bash的参数扩展的函数,如下所示:

 expand(){ echo ${a:+$1}; }; expand "ls /*" 

但是你需要用“*”replace你的[TAB] [TAB]。

我认为对你来说一个好的select是查看你为.bashrc文件写的bash函数。 我的猜测是,你最终一遍又一遍地input命令,而你想加快速度。 下面是我的.bashrc文件中的一个例子:

 newmod() { mkdir -p ${1}/{manifests,files,templates} && \ echo "class $1" >> ${1}/manifests/init.pp && \ echo "class ${1}::conf" >> ${1}/manifests/conf.pp && \ echo "class ${1}::packages" >> ${1}/manifests/packages.pp } 

我创build了很多傀儡模块。 这个函数,当从shell中调用时,为我做了以下工作:

 [configmgr@mback-dev ~]$ newmod testmodule [configmgr@mback-dev ~]$ tree testmodule/ testmodule/ |-- files |-- manifests | |-- conf.pp | |-- init.pp | `-- packages.pp `-- templates 3 directories, 3 files [configmgr@mback-dev ~]$ 

这些文件使用脚手架填充模块类,包和configuration。 这节省了我的打字!

HTH,ztron