大佬教程收集整理的这篇文章主要介绍了bash – 如何在不影响其他完成脚本的情况下重置COMP_WORDBREAKS?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
为了实现某些功能,我想从变量$ COMP_WORDBREAKS中删除单词break字符冒号(:),并在$ COMP_WORDBREAKS的开头添加斜杠(/)。
COMP_WORDBREAKS=" /'><=;|&(" _myTool() { local cur=${COMP_WORDS[COMP_CWORD]} compopt -o nospace # my implement here COMPREPLY=( $(compgen ..........my_implement......... -- $cur) ) } complete -F _myTool myTool
但是,我无法直接重置COMP_WORDBREAKS,因为该值与其他完成脚本共享。到调用完成函数时,变量COMP_WORDS数组已经填充,因此本地更改COMP_WORDBREAKS无效。
是否有任何解决方案可以在一个完成脚本中更改COMP_WORDBREAKS而对其他脚本没有影响?
$ echo $BASH_VERSION 4.2.10(1)-release
但是,bash完成提供了一些帮助方法,您可以使用它们来实现目标。
在完成单词中处理非破坏字符的推荐方法是使用两个辅助方法:
> _get_comp_words_by_ref,带-n EXCLUDE选项
>获取单词到完成而不考虑EXCLUDE中的字符作为单词中断
> __ltrim_colon_completions
>从COMPREPLY项中删除包含前缀的冒号
(http://tiswww.case.edu/php/chet/bash/FAQ-E13的解决方法)
所以,这是一个如何在完成单词中处理冒号(:)的基本示例:
_myTool() { local cur _get_comp_words_by_ref -n : cur # my implementation here COMPREPLY=( $(compgen ..........my_implement......... -- $cur) ) __ltrim_colon_completions "$cur" } complete -F _myTool myTool
作为最后的提示,辅助方法位于/ etc / bash_completion中。查看内部以阅读每种方法的详细说明并发现更多辅助方法。
以上是大佬教程为你收集整理的bash – 如何在不影响其他完成脚本的情况下重置COMP_WORDBREAKS?全部内容,希望文章能够帮你解决bash – 如何在不影响其他完成脚本的情况下重置COMP_WORDBREAKS?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。