我有两个compgen
shell内置的困难。
我尝试用简单的bash _filedir
显示它 - 就像(使用ls
)代码:
_myfiledir(){
path="$cur"
prefix=`echo /$path | grep -o "[0-9a-Z\-+_/]*/"`
sufix=`echo /$path | grep "/[0-9a-Z\-+_]*$" | grep -o "[0-9a-Z\-+_]*$"`
res=`ls -p $prefix`
COMPREPLY=($( compgen -o nospace -W "$res" -- $sufix ))
}
在这种情况下cur=="usr/li"
然后prefix=="/usr/"
和sufix=="li"
我有两个困难。有空间和更换。例如:
$ script usr/li[TAB]
我明白了:
$ script lib/ <- additional space here
我需要:
$ script usr/lib/ <- no space here
此代码仅供参考。
答案 0 :(得分:0)
-o nospace
此选项在compgen
上下文中不起作用。使用compopt
更改选项。
在您的情况下compopt -o nospace
对空白问题有用,compopt -o filenames
对文件名有用。
请注意文件名,您需要将$prefix
添加到$res
变量。选项filenames
仅在向用户显示自动完成时切断部分完整路径。