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 についてはこれまで聞いたことがありませんでした)。これが何をするのか、どこで呼び出されるのかを正確に理解するには、さらに勉強する必要があります。

まだ解明する必要があるなぜ私は年に 1 回か 2 回しか使用しないので、すべてのログイン シェルでこれを実行したいと思いますgit。(Raspberry Pi には RAM が過剰に搭載されているわけではありません)。これは私の Mac では発生しないようです。

答え1

これらの関数は、 のシェルの補完サポートの一部ですgit。これらは Git ソフトウェアの一部として管理されています。Debian (Raspbian のベース) は、 パッケージで bash 補完セットアップを配布しています。これらの関数は、bash の他のコマンド補完サポートと同じディレクトリの にgitあります。/etc/bash_completion.d/git

内のすべてのファイルは、/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/*通常、グローバル スクリプトによってインクルードされ、パッケージはログインのたびにソースされる独自の環境設定スクリプトを配置できます。

関連情報