我有一个 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-completion/bash_completion
如果 NOT ,第二个文件只是指向第一个文件shopt -oq posix
。在我的设置中:
$ if ! shopt -oq posix; then echo "not posix"; fi
not posix
我认为答案必须在/usr/share/bash-completion/bash_completion中。
更多的:
我尝试用bash_completion
最新版本替换,但这也不起作用。
https://github.com/scop/bash-completion
还..
这些文件在放入其中任何一个时都不起作用~/.local/share/bash-completion/completions
。
为了向后兼容,其中的完成文件
/etc/bash_completion.d
总是立即来源。另一方面,目录懒惰地在其中获取脚本,也就是说,在该命令请求完成之前,不会获取特定的完成文件bash_completion
。completions
源文件由其名称确定,因此它必须与您尝试为其完成的命令具有相同的名称。因此,例如,tmux.completion.bash
应该符号链接为completions/tmux
而不是completions/tmux.completion.bash
。最后,当您将其他所有内容放在 下
/usr/local
时,请注意您也可以将完成脚本放在那里:/usr/local/share/bash-completion/completions
.