我在文档中添加了对Maven的bash完成:
http://maven.apache.org/guides/mini/guide-bash-m2-completion.html
除了使用冒号的目标之外,一切运作良好。 例如,而不是
mvn eclipse:eclipse
完成逃离冒号
mvn eclipse\:eclipse
任何build议如何解决这个问题? 我使用的是Ubuntu 8.10(2.6.27-17-generic)和
$ bash -version
GNU bash,版本3.2.39(1)-release(i486-pc-linux-gnu)
从Bash常见问题E13 。
紧跟链接的脚本中的complete
命令之后,发出以下命令以从完成单词分隔字符列表中删除冒号:
COMP_WORDBREAKS=${COMP_WORDBREAKS//:}
这是一个相关的问题和另一个建议的解决方案
如何重置COMP_WORDBREAKS而不影响其他完成脚本?
如前所述,最简单的解决方案是改变COMP_WORDBREAKS
。 但是,在完成脚本中修改COMP_WORDBREAKS
是不安全的(因为它是一个全局变量,它具有影响其他完成脚本行为的副作用 – 例如scp)。
因此,bash完成提供了一些辅助方法,您可以使用它们以更好,更安全的方式实现您的目标。
在Bash completion 1.2中添加了两个辅助方法:
-n EXCLUDE
选项的_get_comp_words_by_ref
__ltrim_colon_completions
所以,这里是一个基本的例子,如何在完成的词中处理冒号(:):
_mytool() { local cur _get_comp_words_by_ref -n : cur # my implementation here __ltrim_colon_completions "$cur" } complete -F _mytool mytool
使用助手方法还可以简化完成脚本,并确保在任何环境(bash-3或bash-4)上获得相同的行为。
您也可以在/etc/bash_completion.d
中看看man
或perl
完成脚本,看看他们如何使用上面的帮助器方法来解决这个问题。
任何建议如何可以解决? 我使用的是Ubuntu 8.10(2.6.27-17-generic)和
丹尼斯的回答绝对正确。
但是为了记录,有一个日志记录问题( MNG-3928 )来改进有关Maven与bash集成的文档。 这个问题有一个附加的脚本,这是目前在线的改进版本,只是工作。 你可能想尝试一下。
就个人而言,我使用Ludovic Claude的PPA (捆绑到Ubuntu的maven包中的PPA)中的Bash Completion脚本 ,我直接从集市下载(她的e是直接下载链接到HEAD版本)。 这真是太棒了。
我会去与willcodeforbeer.com Maven2 Bash完成文件 。
希望有所帮助!