在bash完成中抑制引号字符

时间:2016-07-05 14:15:25

标签: bash shell autocomplete

我正在为查询的某些参数添加bash完成,用户可以在命令行中输入脚本。类似的东西:

foo.py 'select abc(), def

我在这里填写了列名abc()def。我面临的问题是bash会自动添加结束单引号,这是用户的障碍。他们可能想继续编写查询。请注意,我需要在接受查询时使用单引号,因为查询可以包含括号。

例如,

foo.py 'select ab<TAB>

应该导致:

foo.py 'select abc(

而不是:

foo.py 'select abc('

我的完成函数返回select abc(但似乎bash正在插入我想要删除的额外结束语。任何想法如何做到这一点?

使用完成功能:

_egg_autocomplete_()
{
    case "$COMP_CWORD" in
      2)
          readarray -t COMPREPLY < <( ./suggest.py order $2 )
          ;;
    esac
}

suggest.py包含每行打印建议完成次数的实际代码。建议中可以包含空格。

我在https://tiswww.case.edu/php/chet/bash/NEWS找到了以下内容,但无法使其正常运行:

  

Ĵ。新的应用程序变量rl_completion_suppress_quote,可设置   通过应用程序完成功能。如果设置为非零,   readline不会尝试将结束报价附加到已完成的报价   字。

我在我的~/.inputrc文件中添加了以下行,但它没有造成任何差异:

set rl_completion_suppress_quote 1

使用的Bash版本:GNU bash,版本4.2.46(1)-release(x86_64-redhat-linux-gnu)

0 个答案:

没有答案