Bash ls 变量自动补全功能在末尾添加了额外的空格

Bash ls 变量自动补全功能在末尾添加了额外的空格

我在 ubuntu 18.04 上的 gnome-terminal 3.28.2 中使用 bash 4.4.19。

我在控制台中遇到了目录变量的制表符补全问题,这似乎可以通过以下方法解决

shopt -s direxpand 
shopt -s cdable_vars 

FOO假设我在 .bashrc 中定义了一个包含某些路径的变量:export FOO=/some/valid/path

将它与 结合起来cd,我得到以下行为:

$ cd $FOO + [Tab] # nothing happens
$ cd $FOO/ + [Tab] # expands to /some/valid/path

到目前为止一切顺利。

但是,当使用它时ls,第一次扩展后会出现一个空格:

$ ls $FOO + [Tab] # I'm writing the results on the next line
$ ls $FOO[Space]

这很烦人。

在网上搜索解决方案一直无果;之前在 stackexchange 页面上也问过类似的问题,但没有解决方案: 此链接建议修改文件 /etc/bash_completion.d/acroread.sh,但我没有该文件,或者

编辑 /etc/bash_completion 第 1587 行,将默认值更改为文件名(先进行备份)。

但在我的机器上,该文件中没有'default'该行。同样适用于发布的解决方案这个问题

这个问题的答案还说这个错误应该在 bash 4.3 中得到修复,但它不适用于我的 bash 4.4

答案1

在我的 Kubuntu 中我可以执行以下操作:

$ compopt cd
compopt +o bashdefault +o default +o dirnames +o filenames -o nospace +o plusdirs cd
$ compopt ls
compopt +o bashdefault +o default +o dirnames +o filenames +o nospace +o plusdirs ls
$

如您所见, 有-o nospace(选项已启用)cd+o nospace有 (选项已禁用) ls。为了使其在制表符补全后添加空格时的ls行为类似,我运行以下命令:cd

compopt -o nospace ls

手动运行它并检查它是否解决了问题。要永久更改选项,请将命令放在命令末尾~/.bashrc,这样每个新的交互式 Bash 会话都会自动运行它。无需 root 访问权限,也不需要系统范围的补丁。

相关内容