在使用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
重新加载,无论你在做什么分发,你都应该很好地去:(