我想问一下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有一个巧妙的小技巧得到这一点。
但我似乎无法正常工作。 让我知道如果你有更好的运气。
你可以使用一个使用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