贝壳模式的制表符补全

Tob*_*bia 6 command-line bash auto-completion readline

在我的 Debian 服务器上,我习惯于按 Tab 来“预览”shell 模式的扩展:

$ cp *some*<Tab>
something  somewhat  have-some-cake
$ cp *some*_
Run Code Online (Sandbox Code Playgroud)

当模式扩展为一个条目时,Tab 将模式替换为实际条目;否则它会显示匹配条目的列表。这是直观且有用的,因为它与常规的“前缀”制表符完成一致。

但是我的 Ubuntu 服务器和台式机的行为不同:即使它会扩展到多个条目,Tab也会用第一个条目替换该模式。

我已经检查了常见的可疑对象(/etc/bash.bashrc、/etc/inputrc 和本地版本),但我找不到任何区别。

有人知道哪个设置控制这种行为吗?

Olo*_*rin 2

与其他答案相反,这个特定问题可能是使用 bash-completion 的直接结果。bash-completion 包有几个错误(例如,正如有关类似问题的U&L 答案中所指出的)。

如果我在我的中注释掉这一部分.bashrc

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi
Run Code Online (Sandbox Code Playgroud)

并启动一个新的 bash 实例,然后我得到:

$ echo *o*<tab><tab>
foo     food    foo.sh  
$ echo *o*
Run Code Online (Sandbox Code Playgroud)

然后,如果我/usr/share/bash-completion/bash_completion像下面一样获取脚本.bashrc

$ . /usr/share/bash-completion/bash_completion
$ echo foo
Run Code Online (Sandbox Code Playgroud)

*o*立即自动完成,而不foo显示其他匹配项。

顺便说一句,我正在使用 16.04。我不知道新版本中是否已修复此问题。

$ dpkg-query --show --showformat='${Package} ${version}\n' bash bash-completion
bash 4.3-14ubuntu1.2
bash-completion 1:2.1-4.2ubuntu1.1
Run Code Online (Sandbox Code Playgroud)