首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >特定的bash完成文件在/usr/share/bash-completions中不工作,但在/etc/bash_完备.d中工作很好。

特定的bash完成文件在/usr/share/bash-completions中不工作,但在/etc/bash_完备.d中工作很好。
EN

Unix & Linux用户
提问于 2022-09-11 01:26:55
回答 1查看 528关注 0票数 6

我有一个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行提供:

代码语言:javascript
复制
# 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,则第二个文件只指向第一个文件。在我的设置中:

代码语言:javascript
复制
$ 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中放置这些文件也不起作用。

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 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

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/716863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档