防止使用 FS 路径值完成环境变量的 bash tab 补全删除环境变量名称

防止使用 FS 路径值完成环境变量的 bash tab 补全删除环境变量名称

朋友们,

我在 Linux 上使用 GNU bash 作为我的 shell:

$ bash --version
GNU bash, version 4.2.45(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
$ 

当我设置一个以 FS 路径作为其值的环境变量时,它的行为非常奇怪。

假设我想将 /opt/database/bin 添加到 PATH 的前面。

我首先输入:

$ export PATH=/o

然后我按下键盘上的 Tab 键。

但是它并没有完成 /opt 的路径,而是删除了 PATH= 部分!相反,我得到的是:

$ export /opt/

当然,这对我来说毫无用处,而且非常烦人!然后我需要手动添加环境变量名称,这根本不是我想要做的!

我希望它能完成到这个样子:

$ export PATH=/opt/

然后我可以使用最少的输入和 Tab 键来完成其余的路径。

有什么方法可以让它不删除环境变量,并以合理的方式运行,从而最大限度地提高我的工作效率?

答案1

尝试禁用 Bash 完成

不过,在使用 Bash-Completion 的系统上,您的PATH补全功能对我来说是有效的。您可以尝试卸载并重新安装它,看看它是否有效。我发现它提供的功能太有用了,不能放弃。

答案2

完全禁用 Bash-Completion 可能有点过头了。这是一个非常有用且高效的功能。

您描述的损坏通常是/etc/bash_completion.d/由第三方.deb软件包安装的特定 bash 完成配置脚本引起的。

我在 Ubuntu 上遇到了完全相同的问题,对我来说,罪魁祸首是 Debian 包(包含 Node.js 的包管理器)/etc/bash_completion.d/npm安装的脚本。npm

我刚刚将npm脚本移出/etc/bash_completion.d/- 问题解决了,并且保留了有用的 Bash 完成功能。

相关内容