Bash命令行选项卡完成冒号字符
当参数中不包含特殊字符时,我已使用compgen机制成功地为自定义命令实现了bash完成:Bash命令行选项卡完成冒号字符,bash,shell,command-line,Bash,Shell,Command Line,当参数中不包含特殊字符时,我已使用compgen机制成功地为自定义命令实现了bash完成: current=${COMP_WORDS[COMP_CWORD]} all=$(_get_all_items) COMPREPLY=( $(compgen -W "$all" -- $current) ) ... complete -F _prog_compl prog 我使用相同的方法来完成以冒号字符开头的项目::first,:second。。。但它无法显示/自
current=${COMP_WORDS[COMP_CWORD]}
all=$(_get_all_items)
COMPREPLY=( $(compgen -W "$all" -- $current) )
...
complete -F _prog_compl prog
我使用相同的方法来完成以冒号字符开头的项目::first
,:second
。。。但它无法显示/自动完成它们。我试着用反斜杠避开冒号,但也没用。我应该如何在完成时逃离冒号
这些项目以冒号开头,比如::first
,:second
。如果我写progname并以冒号开头,如下所示:
$ progname :<Tab here after colon>
此外,我在贝壳中做了一些实验,得出:
$ compgen -W ":aaaa5 :gb2 :cd3" -- ":"
:aaaa5
:gb2
:cd3
但奇怪的是,它将另一个“:”放在我的鞋底上“:”并使其成为“:”在我键入之后:在命令行上
$ complete
complete -F _alp_compl alp.sh
complete -o nospace -F __dbus_send dbus-send
complete -F _myprog_compl myprog
complete -o nospace -F __gdbus gdbus
complete -o nospace -F __gsettings gsettings
咨询帮助后-bash@gnu.org我得到了一个答案:
冒号打断了完成系统的单词(请参见
COMP_WORDBREAKS shell变量的说明),因此当您键入
progname:[选项卡]
完成系统得到一个要完成的空单词。如果所有的
可能的补全将“:”作为最长的公共前缀,然后是
完成系统将把冒号插入行中
我的COMP_WORDBREAKS搜索会给我一个答案
在修复(我丢失的)/etc/bash_完成文件后,现在,我的冒号启动的完成正在按我的意愿工作。是否可以提供您如何执行
complete
命令?您是否真的什么也没有,或者您是否获得了文件名完成?更新了您的答案问题@konsolebox和Ethan。您是否有其他使用冒号的完成?典型的候选文件是tar
和ssh
,它们使用带有冒号的远程文件名。在Bash本身中甚至可能有硬编码的特殊情况。非常感谢。
$ complete
complete -F _alp_compl alp.sh
complete -o nospace -F __dbus_send dbus-send
complete -F _myprog_compl myprog
complete -o nospace -F __gdbus gdbus
complete -o nospace -F __gsettings gsettings