加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 在查找文件时,让compgen包含斜杠在目录中

发布时间:2020-12-15 19:14:39 所属栏目:安全 来源:网络整理
导读:我想从我的自定义完成中获取以下行为 特定 $ mkdir foo$ touch foo faz/bar faz/baz 我想得到这个 $ foo -u tabtab =foo faz/$ foo -u fatabtab =foo -u faz/$ foo -u faz/tabtab =bar baz 我假设compgen -f将输出foo faz /,但是它输出的foo faz不会帮助我
我想从我的自定义完成中获取以下行为

特定

$ mkdir foo
$ touch foo faz/bar faz/baz

我想得到这个

$ foo -u <tab><tab> =>
foo faz/

$ foo -u fa<tab><tab> =>
foo -u faz/

$ foo -u faz/<tab><tab> =>
bar baz

我假设compgen -f将输出foo faz /,但是它输出的foo faz不会帮助我太多。

我需要后期处理输出,还是有一些魔术组合的选择,compgen的工作?

我遇到同样的问题。以下是我使用的解决方法:

>使用-o默认注册完成功能,例如,完成-o default -F _my_completion。
>当你想要完成文件名时,只要设置COMPREPLY =()并让Readline接管(这就是-o默认的)。

这有一个潜在的问题 – 您可能使用COMPREPLY =()拒绝完成不适合的地方,现在不再工作了。在Bash 4.0及以上版本中,您可以使用compopt解决此问题,如下所示:

>在完成功能的顶部,始终运行compopt o默认值。当COMPREPLY为空时,这将禁用Readline文件名完成。
>当您要完成文件名时,请使用compopt -o default; COMPREPLY =()。换句话说,只有在需要时才启用Readline文件名完成。

我还没有找到一个完整的解决方法,以前的4.0 Bash,但我有一些对我来说很好的东西。我可以描述这个,如果有人真的关心,但希望这些较旧的Bash版本很快将脱离常见的使用。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读