bash 自动完成因通配符而失败

bash 自动完成因通配符而失败

bash在此系统上使用:

Linux 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt20-1+deb8u4 (2016-02-29) x86_64 GNU/Linux

序列:

cd /tmp
touch test1.txt && touch test2.txt && touch test3.txt
ls test [tab][tab]

演出:

test1.txt test2.txt test3.txt

在命令行下方。

这就是我期望bash自动完成的行为。

但是当我输入:

ls test* [tab][tab]

(期望相同的结果)我只得到(即自动完成功能专门扩展到):

test1.txt

*因此,末尾的星号 ( ) 通配符表示test[23].txt“无法访问”。我非常确定这两个序列在​​以前版本的 bash 中给出了相同的结果 —— 至少在我的计算机上是这样。

还有人有这个问题吗?这是一个可以更改的默认设置(例如在 Debian 8 中)吗?(我尝试设置和取消设置不同的 shell 参数,shopt但无济于事)。

答案1

嗯,对我有用的解决方案是这样的:~/.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

我以为这个块负责自动完成。但在将其注释掉并启动新 shell 后,它不仅能正常工作,而且还恢复到了我习惯的方式!

仍然不确定if-clause 是什么意思,但我不会在它工作时尝试修复它。

相关内容