文件路径完成的自定义Bash自动完成

时间:2017-08-20 03:47:25

标签: bash macos bash-completion

我正在为一个项目进行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 answersthe docs 似乎表明-o filenames-o bashdefault选项应该处理这个问题 - 但它没有'似乎在OS X 10.11上工作。我不确定我是否误解了-o,或者我的完成文件中的代码是否以某种方式覆盖了-o行为,或者OS X是否正在执行它我只是表现得非常好unix 的事情。

另外 - 如果不明显 - 这我的第一个深度bash完成圈地。如果我在上面说了一些看似愚蠢/天真的话,请告诉我。我现在可能正在寻找一条鱼,但我想在自己的bash完成河里学习鱼。

1 个答案:

答案 0 :(得分:2)

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

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

(另请参阅'complete -d -o default cd' issue了解-o default-o bashdefault之间的区别。)