Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash命令行选项卡完成冒号字符_Bash_Shell_Command Line - Fatal编程技术网

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。。。但它无法显示/自

当参数中不包含特殊字符时,我已使用compgen机制成功地为自定义命令实现了bash完成:

    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