带有文件路径补全的自定义 Bash 自动补全

Ala*_*orm 3 macos bash bash-completion

我正在为我是维护者的项目进行 bash 自动完成。您可以在此处找到该脚本。我自己拼凑了一些黑客技术,并在一些比我更了解完成 API 的贡献者的帮助下完成了这项工作。

我们拥有的东西很好用——只有一个例外。我们可以像这样管理完成

//type
pestle.phar som[TAB]

//completes to 
pestle.phar some-command-name 
Run Code Online (Sandbox Code Playgroud)

然而,一旦我们到达这里,我们就会丢失文件路径/名称补全,它是股票 bash shell 的一部分。也就是说,处理上一个示例,如果用户键入

//type
pestle.phar some-command-name /va[TAB]
Run Code Online (Sandbox Code Playgroud)

我们希望它完成

//completes to the following, because var exists
pestle.phar some-command-name /var
Run Code Online (Sandbox Code Playgroud)

有没有办法只告诉complete命令类似

嘿,除了我们告诉您使用自定义 bash 函数执行的所有操作之外,还要保持正常的文件路径完成

如果没有,是否有一些已知的科学/样板可以在您自己的自定义基本完成功能中重新实现文件路径完成?

其他一些答案文档 似乎表明-o filenamesor-o bashdefault选项应该解决这个问题——但它似乎不适用于 OS X 10.11。我不确定我是否误解了-o,或者我的完成文件中的代码是否以某种方式覆盖了-o行为,或者如果 OS X 正在这样做,我只是一个表现良好的 unix东西。

另外——如果它不明显——这我的第一个深度 bash 完成牛仔竞技表演。如果我在上面说了一些看似愚蠢/幼稚的话,请告诉我。我现在可能在寻找一条鱼,但我想学习鱼在bash补河自己。

pyn*_*exj 5

我认为-o default(没有-o filenames)应该适合你。根据手册:

  • bashdefault如果 compspec 未生成匹配项,则
    执行其余的默认 bash 完成
  • default如果 compspec 未生成匹配项,则
    使用readline 的默认文件名完成
  • filenames
    告诉 readline compspec 生成文件名,因此它可以执行任何特定于文件名的处理(例如向目录名添加斜杠、引用特殊字符或抑制尾随空格)。旨在与 shell 函数一起使用。

(另请参阅“完整 -d -o 默认 cd”问题以了解-o default和之间的区别-o bashdefault。)