我正在为查询的某些参数添加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)