bash 补全函数从何而来?

bash 补全函数从何而来?

我有一个运行 Raspbian (Debian Wheezy) 的 Raspberry Pi。我进入set终端,对长长的列表感到惊讶。这似乎几乎完全是 git 函数——大约 3700 行。

__git_all_commands=
__git_diff_common_options=$'--stat --numstat --shortstat --summary\n\t\t\t--patch-with-stat --name-only 
...

我的问题是,他们是如何到达那里的以及为什么?

我偶尔会git收到包裹。

我已经检查了所有常见的嫌疑人/etc/profile,,,/etc/bash.bashrc.bashrc.profile


我找到了一个脚本/etc/bash_completion.d/git(我以前从未听说过 bash_completion)。我必须做更多的研究才能弄清楚它的作用,以及它的确切调用位置。

我还需要弄清楚为什么git当我每年只使用一两次时,我希望在每个登录 shell 中运行它。 (Raspberry Pi 的 RAM 并不完全过多)。我的 Mac 上似乎没有发生这种情况。

答案1

这些函数是 shell 对git.它们作为 Git 软件的一部分进行维护。 Debian(Raspbian 所基于的)在git包中分发了 bash 完成设置。这些函数位于/etc/bash_completion.d/git与 bash 的其他命令完成支持相同的目录中。

中的所有文件/etc/bash_completion.d都作为设置 bash 可编程完成的一部分加载,在/etc/bash_completion. Debian 的默认.bashrc加载/etc/bash_completion,如果您不想要任何特定于命令的完成,您可以将其编辑掉。

如果您从不使用 git,请删除该git软件包。如果您git安装了该软件包,那么您可能有时会运行该git命令,因此希望能够很好地完成它。 “我很少使用 git,我想节省几千字节的 RAM”,即使对于 Debian 来说,这种区别也太细微了。

如果您想跳过该完成文件但使用其他文件,您可以转移该文件的名称会导致它被 跳过/etc/bash_completion。转移文件是告诉包管理器将更新和删除应用于位于不同位置的文件的一种方法。

dpkg-divert --add --local --rename --divert /etc/bash_completion.d/git.dpkg-diverted /etc/bash_completion.d/git

答案2

登录时包含全局脚本和每用户脚本(/etc/profile$HOME/.profile$HOME/.bash_profile$HOME/.bash_login)。

在大多数发行版上,某些目录的内容(类似/etc/env.d/*或类似的内容)通常包含在全局脚本中,其中包可以放置自己的环境设置脚本,这些脚本在每次登录时都会获取。

相关内容