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/*或類似的內容)通常包含在全域腳本中,其中套件可以放置自己的環境設定腳本,這些腳本在每次登入時都會取得。

相關內容