每次打开终端时,获取bash完成错误都是一个目录



在使用Windows 13年后,几天前我刚刚切换到Linux(Ubuntu 20.04(,到目前为止我很喜欢它。

当然,我开始把一切都搞砸了,因为这就是我通常学习新东西的方式,现在我遇到了一个问题。

我安装了Alacritty终端,一切都很顺利,但有一个小问题。

我按照这些说明安装bash完成:

mkdir -p ~/.bash_completion
cp extra/completions/alacritty.bash ~/.bash_completion/alacritty
echo "source ~/.bash_completion/alacritty" >> ~/.bashrc

现在,每次打开终端时,我都会收到以下错误:
bash::/home/myname/.bash_completion:是一个目录
我以为我引用的是文件夹而不是文件,所以我在nano编辑器中打开了.bashrc文件,但我没有找到/home/myname/.bash_complation的引用,只有source~/.bash-completion/alacrity
我试图搜索这个问题,但没有找到有同样问题的人
这是我的bashrc文件:https://pastebin.pl/view/83ce4d25

因此问题在于.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

我不知道你为什么会出现这个特定的错误,但这里的行试图找到bash_completion工具的路径并执行它

由于拆除线路后才能完工,所以在其他地方已经指定了。

TLDR:创建~/.bash_completion.d目录,并在相关的地方引用它。

随后,我偶然发现了完全相同的场景,并想弄清楚如何正确处理。

作为参考,我正在运行Linux Mint(基于Debian(。

.bash_profile中,有这样一行:

[ -f /etc/bash_completion ] && source /etc/bash_completion

来源文件包含:

. /usr/share/bash-completion/bash_completion

到目前为止,我们的行为基本相同。只是处理方式不一样。

现在,由于这是默认的,最好不要碰任何东西,以避免出现额外的问题。大多数Linux发行版都假设~/.bash_completion是一个具有用户定义的补全的文件,而不是一个目录。

还有一种(某种?(约定,用于创建名称中后缀为.d的目录,以使内容明确并防止冲突(例如我们的(。

解决方案是:

mkdir -p ~/.bash_completion.d
mv ~/.bash_completion/* ~/.bash_completion.d
rm ~/.bash_completion
vim ~/.bashrc

打开编辑器后,从以下位置更新路径:

source ~/.bash_completion/alacritty

至:

source ~/.bash_completion.d/alacritty

重新加载,无论你在做什么分发,你都应该很好地去:(

相关内容

最新更新