首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >compgen不进入目录。

compgen不进入目录。
EN

Stack Overflow用户
提问于 2016-10-09 22:02:29
回答 1查看 306关注 0票数 1

我已经定义了一个bash_completion脚本。在某些情况下,我希望回到大多数命令默认情况下基于文件的基本完成。要做到这一点,我使用的是compgen,但我不能让它下降到子目录。

假设我在一个目录中运行compgen,其中包含一个名为bin的目录。当我运行compgen -f bi时,我会得到bin。我希望它返回bin/,然后允许我再次将TAB推入到bin目录的内容中。但是,相反,complete只获得一个值,并假定它已到达处理的末尾。这与bash完成在ls bi[TAB]将导致ls bin/的一般情况下的工作方式不同。

由于我无法使它工作,目前我已经编写了自定义代码,这些代码深入目录以执行正确的bash完成,但是必须有一种直接使用compgen的方法。

EN

回答 1

Stack Overflow用户

发布于 2022-09-30 12:30:52

我的头一直撞在这堵砖墙上(没有双关的意思)。刚刚意识到,诀窍不在于如何在自定义完成函数中调用compgen,而在于如何告诉complete处理它,特别是您需要告诉它将函数的结果作为文件名来处理(因此,如果给出了一个目录,则让您进入它):

代码语言:javascript
复制
complete -o filenames -F _mycmd_completions mycmd

在内部,对于我的自定义函数,我也做了以下工作来匹配dir和文件(包括处理带有空格的文件/dir):

代码语言:javascript
复制
_mycmd_completions()
{
  local IFS=$'\n\t'
  local word="${COMP_WORDS[$COMP_CWORD]}"
  local values=($(compgen -d -- "$word") $(compgen -f -- "$word"))
  # Processing on values ...
  COMPREPLY=(${values[@]})
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39948985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档