我发现这shopt -s nullglob
显然禁用了文件和目录的制表符补全功能,并shopt -u nullglob
恢复了它。为什么目录的制表符完成显然依赖于nullglob
未设置?
我4.2.37(1)-release
在 Debian 7 上使用 Bash。
我发现这shopt -s nullglob
显然禁用了文件和目录的制表符补全功能,并shopt -u nullglob
恢复了它。为什么目录的制表符完成显然依赖于nullglob
未设置?
我4.2.37(1)-release
在 Debian 7 上使用 Bash。
这显然是 bash-completion 的一个已知问题,并被列为 3.0 版本中要修复的目标。
但显然至少从 2012 年开始就是这样。
请参阅https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=666933以供参考。
编辑:至少 2011 年: http: //thread.gmane.org/gmane.comp.shells.bash.completion.devel/3652
不过,我完全不明白 nullglob 是如何导致该电子邮件中列出的问题的。
编辑:我现在明白发生了什么。问题是全局扩展是愚蠢的。它将整个“单词”$2[$j]=\${!ref}\${COMP_WORDS[i]}
视为一个整体并尝试扩展它。通常这会失败并且它会被单独留下,但nullglob
整个论点都会消失(从而导致问题)。
快速测试表明替换它:
eval $2[$j]=\${!ref}\${COMP_WORDS[i]}
与:
eval $2\[$j\]=\${!ref}\${COMP_WORDS\[i\]}
或者:
eval "$2[$j]=\${!ref}\${COMP_WORDS[i]}"
似乎解决了这个问题。不过,我不能保证其中任何一个都是完全正确的解决方法。
更新:这已在 debian bash-completion git 存储库中修复(以我没有想到的方式,但显然更好)。
这个提交修复了它。还有其他与通配符相关的修复。
从git __reassemble_comp_words_by_ref
head 获取并在当前的顶部获取它似乎可以将问题作为临时解决方法/解决方案来解决。