0

我在使用compgenshell 内置时遇到了两个困难。我尝试用简单的类似 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"thenprefix=="/usr/"sufix=="li"

我有两个困难。有空间和更换。例如:

$ script usr/li[TAB]

我得到:

$ script lib/  <- additional space here

我需要:

$ script usr/lib/ <- no space here

此代码仅作为示例。

4

1 回答 1

0

-o 无空间

compgen此选项在上下文中不起作用。用于compopt更改选项。在您的情况下compopt -o nospace,对于空格问题和compopt -o filenames文件名很有用。请注意文件名,您需要添加$prefix$res变量中。当显示给用户自动完成时,选项filenames仅剪切完整路径的一部分。

于 2014-02-25T17:20:20.467 回答