![Debian 8 中的 Bash 自动完成行为](https://linux22.com/image/1482872/Debian%208%20%E4%B8%AD%E7%9A%84%20Bash%20%E8%87%AA%E5%8A%A8%E5%AE%8C%E6%88%90%E8%A1%8C%E4%B8%BA.png)
在新安装的 Debian 8(Jessie)中,我发现使用tab
键的 bash 自动完成功能已经发生了变化。
我做的测试是:
- 打开一个终端(在我的情况下
Konsole
)。它显示在提示上方
~ ~
~ ~ ~
~ ~ ~ ~
~ ~ ~ ~ ~
~ ~ ~ ~ ~ ~
~ ~ ~ ~ ~ ~ ~
~ ~ ~ ~ ~ ~ ~ ~
~ ~ ~ ~ ~ ~ ~ ~ ~
~ ~ ~ ~ ~ ~ ~ ~ ~ ~
mkdir -p /tmp/test
# 创建测试目录cd /tmp/test
# 进入空目录ls <tab> <tab> <tab> <tab>
/tmp/test /tmp/test ~ ~ ~ ~ ~ ~ ~ ~ ~
# 1 秒后tab
/tmp/test /tmp/test /tmp/test ~ ~ ~ ~ ~ ~ ~ ~ ~
# 2tab
秒后
/tmp/test /tmp/test /tmp/test /tmp/test ~ ~ ~ ~ ~ ~ ~ ~ ~
# 3tab
秒后 # 4秒
/tmp/test /tmp/test /tmp/test /tmp/test /tmp/test ~ ~ ~ ~ ~ ~ ~ ~ ~
后tab
它过去只显示目录中的文件(如果有的话)。有人知道是什么原因造成的吗?有什么问题吗.bashrc
?如果有帮助的话,很乐意发送更多文件!
答案1
只需两步即可找到这个谜题的答案。首先,我以前.bash_aliases
使用的alias [='pushd .'
和alias ]='popd'
。删除这些行解决了上述奇怪的行为,但我丢失了别名。
但如果我保留这些别名,并把这行
if [[ -f ~/.bash_aliases ]]; then
. ~/.bash_aliases
fi
在.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
那么我就可以保留我的[
和]
别名和具有正常的自动完成功能。因此,别名似乎干扰了 Jessie 在 Bash 中的自动完成设置。 的调用.bash_aliases
最初在自动完成脚本的调用之前,唯一的原因是,在安装随附的模板中,.bashrc
它们是按该顺序进行的。