bash - 列出特定路径的目录作为 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 的上下文中运行的,以防有什么不同。
解决方案
原因complete -C
不像您期望的那样工作-C
是应该采用一个本身带有三个参数的命令。来自Bash 手册:
调用函数或命令时,第一个参数 ($1) 是正在完成其参数的命令的名称,第二个参数 ($2) 是正在完成的单词,第三个参数 ($3) 是前面的单词在当前命令行上完成的单词。
因此,如果您想使用-C
.complete
推荐阅读
- audio - 首字母缩略词 AISAC 代表什么?
- javascript - 为什么 CSS 关键帧不能与 Position Absolute 一起使用?
- powershell - 如何使用 Get-EventLog 在 PowerShell 中获得与 Get-WinEvent 相同的结果?
- javascript - 从 json 字符串在 ReactJS 中动态创建 DOM
- dll - 将 .dll 引用到 dotnet core 2.2
- javascript - 无法使用单选按钮的 if else 语句找出此代码
- python - 未找到某些模块的 Omni 完成模式
- javascript - 将数组从html表单传递给gs
- javascript - 我们如何在 Angular JS 中预览视频?
- java - 在 Java 8 中通过序列 PNG 图像生成 MP4 视频文件