我正在为一个项目进行bash自动完成我是其维护者。你可以find the script here。我自己拼凑了一些黑客,并且在一些比我更了解完成API的贡献者的帮助下。
我们的工作很棒 - 有一个例外。我们可以像这样管理完成
//type
pestle.phar som[TAB]
//completes to
pestle.phar some-command-name
然而,一旦我们在这里,我们丢失文件路径/名称完成,这是库存bash shell的一部分。也就是说,如果用户键入
,则可以使用上一个示例//type
pestle.phar some-command-name /va[TAB]
我们希望它完成
//completes to the following, because var exists
pestle.phar some-command-name /var
有没有办法告诉complete
命令类似
嘿,除了我们告诉您使用我们的自定义bash功能所做的一切,还要保持正常的文件路径完成
如果没有,是否有一些已知的科学/样板用于在您自己的自定义基本完成功能中重新实现文件路径完成?
某些other answers和the docs 似乎表明-o filenames
或-o bashdefault
选项应该处理这个问题 - 但它没有'似乎在OS X 10.11上工作。我不确定我是否误解了-o
,或者我的完成文件中的代码是否以某种方式覆盖了-o
行为,或者OS X是否正在执行它我只是表现得非常好unix 的事情。
另外 - 如果不明显 - 这是我的第一个深度bash完成圈地。如果我在上面说了一些看似愚蠢/天真的话,请告诉我。我现在可能正在寻找一条鱼,但我想在自己的bash完成河里学习到鱼。
答案 0 :(得分:2)
我认为-o default
(没有-o filenames
)应该适合您。根据手册:
- 的 bashdefault 强>
如果compspec没有生成匹配项,请执行剩余的默认bash完成。- 默认强>
如果compspec没有生成匹配项,请使用 readline的默认文件名完成。- 的文件名强>
告诉readline compspec生成文件名,因此它可以执行任何特定于文件名的处理(比如向目录添加斜杠) 名称,引用特殊字符或抑制尾随空格。旨在与shell函数一起使用。
(另请参阅'complete -d -o default cd' issue了解-o default
和-o bashdefault
之间的区别。)