特定的 bash 完成文件在 /usr/share/bash-completion/completions 中不起作用,但在 /etc/bash_completion.d 中工作正常

特定的 bash 完成文件在 /usr/share/bash-completion/completions 中不起作用,但在 /etc/bash_completion.d 中工作正常

我有一个 git 存储库,其中保存了一些静态链接的二进制文件以及相关的 man 文件和 bash 完成文件,这些文件都是使用“安装”的GNU 斯托制作符号链接。

我之前已经将 bash 完成文件的符号链接放入,/etc/bash_completion.d没有任何问题,但最近我开始将它们放入/usr/share/bash-completion/completions,因为我认为这对它们来说是一个更正确的位置,因为二进制文件正在进入,/usr/local/bin而 man 文件也在/usr/local/share/man

除了四个特定的 bash 完成文件之外,一切都像以前一样工作,当放置在这个新位置时,这些文件不再工作。这些都是:

fzf 的这两个:

我还有其他 20 个可以正常工作的 bash 补全文件。这些特定的 bash 完成文件是什么让它们在 in 时/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

/etc/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

答案1

为了向后兼容,/etc/bash_completion.d总是立即获取中的完成文件。另一方面,目录延迟地获取其中的脚本,也就是说,直到请求该命令的完成时才获取特定的完成文件bash_completioncompletions源文件由其名称决定,因此它必须与您尝试获取补全的命令具有相同的名称。因此,例如,tmux.completion.bash应该符号链接为completions/tmux和 not completions/tmux.completion.bash

最后,当您将其他所有内容都放在 下时/usr/local,请注意,您也可以将完成脚本放在那里:/usr/local/share/bash-completion/completions

相关内容