代码之家  ›  专栏  ›  技术社区  ›  armandino

Maven Escapes Colon的bash完成

  •  13
  • armandino  · 技术社区  · 15 年前

    我为Maven添加了以下文档的bash完成:

    http://maven.apache.org/guides/mini/guide-bash-m2-completion.html

    除了使用冒号的目标外,所有的工作都很好。例如,而不是

    mvn eclipse:eclipse
    

    结案逃过了结肠

    mvn eclipse\:eclipse
    

    有什么建议可以解决这个问题吗?我正在使用Ubuntu8.10(2.6.27-17-generic)和

    BASH版本
    GNUbash,版本3.2.39(1)-发行版(i486pcLinuxGNU)

    4 回复  |  直到 15 年前
        1
  •  13
  •   Dennis Williamson    15 年前

    Bash FAQ E13 .

    紧随其后 complete 命令在链接到的脚本中,发出此命令以从完成分词符列表中删除冒号:

    COMP_WORDBREAKS=${COMP_WORDBREAKS//:}
    
        2
  •  8
  •   Community CDub    8 年前

    下面是一个相关问题和另一个建议的解决方案:

    How to reset COMP_WORDBREAKS without effecting other completion script?

    如前所述,最简单的解决方案是改变 COMP_WORDBREAKS . 但是,修改 编译中断 在您的完成脚本中是不安全的(因为它是一个全局变量,并且它具有影响其他完成脚本行为的副作用-例如scp)。

    因此,bash完成提供了一些辅助方法,您可以使用这些方法以更好、更安全的方式实现您的目标。

    添加了两个助手方法 Bash completion 1.2 为此:

    • _get_comp_words_by_ref -n EXCLUDE 选项
      • 获取要完成的单词,而不将排除中的字符视为换行符
    • __ltrim_colon_completions

    因此,下面是一个基本的例子,说明如何在完成字中处理冒号(:)。

    _mytool()
    {
        local cur
        _get_comp_words_by_ref -n : cur
    
        # my implementation here
    
        __ltrim_colon_completions "$cur"
    }
    complete -F _mytool mytool
    

    使用helper方法还可以简化完成脚本,并确保在任何环境(bash-3或bash-4)上都能获得相同的行为。

    你也可以看看 man perl 完成脚本在 /etc/bash_completion.d 看看他们如何使用上面的辅助方法来解决这个问题。

        3
  •  2
  •   Pascal Thivent    14 年前

    有什么建议可以解决这个问题吗?我正在使用Ubuntu8.10(2.6.27-17-generic)和

    丹尼斯的回答绝对正确。

    但是,有一个记录在案的问题( MNG-3928 )以改进有关Maven与bash集成的文档。这个问题附带了一个脚本,它是当前在线版本的一个改进版本,并且只起作用。你可能想试试。

    就个人而言,我使用 Bash Completion script from Ludovic Claude's PPA (从Ubuntu打包到maven包中的那个)我直接从Bazaar下载(她的e是一个直接的 download link 头部修订)。真是太棒了。

        4
  •  1
  •   Adam Monsen    14 年前

    我会去 the Maven2 Bash Completion File at willcodeforbeer.com .

    • 伟大工程
    • 处理冒号
    • 不会破坏全局变量comp-wordbreaks(从而破坏scp等)
    • 易于编辑和理解

    希望有帮助!