首页 > 解决方案 > 列出特定路径的目录作为 bash 脚本的自动完成选项?

问题描述

我的.bash_profile中有一个名为repos的 bash 函数,我想为此添加列出特定目录内容的自动完成功能。我正在尝试使用该命令来实现这一点。complete

简而言之,我尝试过的:

创建了一个名为repos_complete.bash的文件,其中包含以下代码。此后我运行source repos_complete.bash以确保它适用于repos脚本。

中的代码repos_complete.bash

complete -A directory repos

到目前为止的结果:如果我输入repos,然后按tab,它将列出当前目录的内容。但是,我想要的是它列出另一个目录的内容,例如~/source/repos/.

我试图通过用以下内容替换repos_complete.bash的内容来做到这一点:

 complete -C ls ~/source/repos repos

repos但是,现在输入tab时,我收到一条错误消息:

无法访问“repos”:没有这样的文件或目录

在我看来,好像-C(之后接受命令)将整行解释为命令,包括最后一个“ repos”,而不是仅将第一部分 ( ls ~/source/repos) 作为命令应用到函数repos,这就是我'正在努力实现。

这里有关于以正确方式传递ls <some path>命令的正确方法的任何提示吗?


注意:我应该指出,这是在 Windows 10 下的 git bash shell 的上下文中运行的,以防有什么不同。

标签: bashshellgit-bash

解决方案


原因complete -C不像您期望的那样工作-C是应该采用一个本身带有三个参数的命令。来自Bash 手册

调用函数或命令时,第一个参数 ($1) 是正在完成其参数的命令的名称,第二个参数 ($2) 是正在完成的单词,第三个参数 ($3) 是前面的单词在当前命令行上完成的单词。

因此,如果您想使用-C.complete


推荐阅读