标签完成导致美元符号被转义

Dav*_*arr 5 bash 12.04

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

例如

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

标签后: user@test:~$ \$HOME/Documents/

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

小智 2

这是 Ubuntu 12.04 附带的 bash 版本的东西。

我能够从源代码编译 bash,将 bash 版本提升到 4.2.37,从而解决了该问题。

  • **解决方案是设置“shopt -s direxpand”**参见[此处](http://www.usn-it.de/index.php/2017/01/21/oracle-enterprise-linux-7-how -to-stop-bash-tab-completion-from-escaping-the-dollar/) (12认同)

ste*_*ert 1

您在评论中提到您的实际问题不在于“$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)