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 是什么意思,但我不会在它工作时尝试修复它。