Tab 键补全导致美元符号被转义

Tab 键补全导致美元符号被转义

使用 Ubuntu 12.04。当我在终端中输入以变量引用开头的路径时env,我按 Tab 键来完成一个单词,它会转义变量引用$中的env。因此,我必须继续回到行首并删除反斜杠,这样我才能继续沿着树导航。

例如

标签之前: user@test:~$ $HOME/Docum

选项卡之后: user@test:~$ \$HOME/Documents/

我的 $HOME/.bashrc 已启用“bash_completion”。

答案1

这是 Ubuntu 12.04 附带的 bash 版本的内容。

我能够从源代码编译 bash,以使我的 bash 版本升级到 4.2.37,从而解决了这个问题。

答案2

您在评论中提到,您的实际问题不在于“$HOME”。这非常重要,因为它是否是环境变量很重要。

如果您以美元符号开头,Bash 将首先完成可能的环境变量,最后完成文件名。因此,如果它找不到要为您完成的变量,则它可能找到了文件名,在这种情况下,它将使用反斜杠转义美元符号,因为这是一个特殊字符。

如果您使用程序启动命令,后面跟着一些变量,则补全可能会交给可编程补全,这也可能导致这种情况。例如,键入 gzip $HOME/ 后跟 tab 将插入反斜杠。处理可编程补全的文件归“bash-completion”包所有,因此您可以卸载该包(我没有安装),或者您可以说服他们这是一个错误。维护者:http://bash-completion.alioth.debian.org/

更新:在 Arch Linux 上,我尝试了 bash-completion 版本 2.0,它对 可以正常工作ls $HO<TAB>,但对 不行,ls $HOME/<TAB>所以我猜他们仍然没有解决这个错误(Ubuntu 使用版本 1.3)。您可以尝试手动安装版本 2.0,但请注意它不能完全正常工作。(由于错误报告也提到它可能是 bash,我使用的是版本 4.2.37 而不是 4.2.24)

相关内容