我有一个git存储库,在这里我保存了一些静态链接的二进制文件以及相关的man文件和bash完成文件,这些文件都是使用GNU Stow进行符号链接的“安装”。
以前,我将bash完成文件的符号链接放在/etc/bash_completion.d中,没有任何问题,但最近我开始将它们放在/usr/share/bash-completion/completions中,因为我认为这对它们来说是一个更正确的位置,因为二进制文件在/usr/local/bin中运行,而man文件在/usr/local/share/man中。
除了四个特定的bash完成文件之外,所有东西都像以前一样工作,当放置在这个新位置时,这些文件不再工作。它们是:
这两个代表fzf:
我有20个其他bash完成文件,工作良好。这些特定的bash完成文件如何使它们在/etc/bash_completion.d中工作,没有任何问题,但在/usr/share/bash-completion/completions中没有问题?
编辑:它们也不适用于~/.local/share/bash-completion/completions。
这些文件由标准的Debian/Ubuntu .bashrc行提供:
# Enable programmable completion features
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在这两个位置上,并不是目录上的内容是被源的,而是这两个文件:
/usr/share/bash-完成/bash_完成
/etc/bash_完成
如果不是shopt -oq posix,则第二个文件只指向第一个文件。在我的设置中:
$ if ! shopt -oq posix; then echo "not posix"; fi
not posix我认为答案一定是在/usr/share/bash-完成/bash_完成。
我试着用最新版本取代bash_completion,但这也不起作用。
https://github.com/scop/bash-completion
在~/.local/share/bash-completion/completions中放置这些文件也不起作用。
发布于 2022-09-18 15:55:17
为了实现向后兼容性,/etc/bash_completion.d中的完成文件总是由bash_completion立即提供。另一方面,completions目录懒洋洋地来源于内部的脚本,也就是说,在为该命令请求完成之前,才会提供特定的完成文件。要源的文件是由它的名称决定的,因此它必须具有与您试图获得完成的命令相同的名称。因此,例如,tmux.completion.bash应该以completions/tmux而不是completions/tmux.completion.bash的形式进行符号链接。
最后,当您将所有其他内容都放在/usr/local下时,请注意,您也可以将完成脚本放在那里:/usr/local/share/bash-completion/completions。
https://unix.stackexchange.com/questions/716863
复制相似问题