Откуда берутся функции автодополнения bash?

Откуда берутся функции автодополнения bash?

У меня есть Raspberry Pi с Raspbian (Debian Wheezy). Я вошел 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один или два раза в год. (Raspberry Pi не слишком наделен оперативной памятью). На моем Mac этого, похоже, не происходит.

решение1

Эти функции являются частью поддержки завершения оболочки для git. Они поддерживаются как часть программного обеспечения Git. Debian (на котором основан Raspbian) распространяет настройку завершения bash в пакете git. Функции находятся в /etc/bash_completion.d/git, в том же каталоге, что и другая поддержка завершения команд для bash.

Все файлы в /etc/bash_completion.dзагружаются как часть настройки программируемого автодополнения bash, в /etc/bash_completion. В Debian .bashrcзагружаются файлы по умолчанию /etc/bash_completion, вы можете отредактировать их, если вам не нужно автодополнение, специфичное для команд.

Если вы никогда не используете git, удалите gitпакет. Если у вас gitустановлен пакет, то, вероятно, вы иногда запускаете gitкоманду и поэтому хотите иметь хорошее завершение для нее. «Я использую git редко и хочу сэкономить несколько килобайт оперативной памяти» — слишком тонкое различие даже для 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/*или чего-то подобного) обычно включается в глобальный скрипт, в котором пакеты могут размещать свои собственные скрипты настройки среды, которые вызываются при каждом входе в систему.

Связанный контент