gpt4 book ai didi

bash - nullglob 禁用路径名制表符完成

转载 作者:行者123 更新时间:2023-11-29 09:14:34 25 4
gpt4 key购买 nike

我发现 shopt -s nullglob 显然禁用了文件和目录的制表符完成,而 shopt -u nullglob 恢复了它。为什么目录的制表符补全显然依赖于未设置 nullglob

我在 Debian 7 上使用 Bash 4.2.37(1)-release

最佳答案

这显然是 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]} 视为单个 glob 并尝试扩展它.通常这会失败并且它会被单独留下,但是整个参数上的 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 存储库中修复(以一种我没有想到但显然更好的方式)。

This commit修复它。还有其他与 globbing 相关的修复。

从 git head 中获取 __reassemble_comp_words_by_ref 并将其作为临时解决方法/解决方案来解决问题。

关于bash - nullglob 禁用路径名制表符完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29907892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com