Bash: настройка
Для настройки шелла важно понимать разницу между интерактивным и неинтерактивным шеллами. Первый -- это любой экземпляр командной оболочки, запущенный пользователем непосредственно. Если этот экземпляр запускается при входе пользователя в систему, его называют login shell (то есть главная пользовательская оболочка).
Очевидно, что login shell — также интерактивен, однако в сеансе работы каждого пользователя он будет единственным. Просто же интерактивных шеллов можно запустить сколько угодно — например, в каждом терминальном окне или вкладке терминальных программ будет функционировать собственная копия интерактивного шелла.
Неинтерактивный шелл -- это экземпляр командной оболочки, вызываемый при выполнении пользователем любой команды или любого сценария. Он может быть вызван неявным или явным образом. Первый случай имеет место быть при выполнении команды из строки оболочки. Явный же вызов шелла происходит при выполнении сценариев оболочки -- любой из них запускает собственный экземпляр командного интерпретатора.
Схема настройки bash
предусматривает наличие пары файлов /etc/profile
и /etc/bashrc
(для пользовательского шелла и просто интерактивного его экземпляра), а также соответствующих им пользовательских конфигов -- ~/.bash_profile
и ~/.bashrc
. При авторизации первым в любом случае считывается общесистемный профильный файл /etc/profile
, вслед за ним -- пользовательский профильный файл ~/.bash_profile
, после чего происходит обращение к ~/.bashrc
. Файл /etc/profile
может занимать особое положение -- в него часто помещают переменные окружения (например, локально-зависимые), которые должны быть общими для всех пользователей данной системы.
Пользовательские настройки определяются в файлах ~/.bash_profile
и ~/.bashrc
. Обычно в ~/.bash_profile
определяются переменные окружения, которые должны действовать для всех дочерних процессов, а в ~/.bashrc
-- параметры, всегда требуемые в в интерактивном режиме (например, псавдонимы).
Библиотека функций readline
имеет собственные конфигурационные файлы, общесистемный /etc/inputrc
и пользовательский ~/.inputrc
.
В большинстве дистрибутивов Linux, в том числе и в Fedora ~/.bash_profile
играет сугубо служебную роль, и содержимое его сводится к отработке файла ~/.bashrc
:
# .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi
и добавлению в переменную PATH
пути к исполняемым файлам пользователя
# User specific environment and startup programs PATH=$PATH:$HOME/bin export PATH
В файле же ~/.bashrc
записываются почти все пользовательские настройки.
Большинство настроек bash
по умолчанию разумны, и потому наличные конфигурационные файлы вполне могут быть взяты за основу. Однако путём некоторых несложных действий их можно дополнить, увеличив удобство интерактивного использования командной оболочки.
Так, по умолчанию в bash
автодополнение клавишей табулятора не работает, например, в аргументах многих команд, таких, как sudo
или man
. Решается эта задача очень просто: достаточно в файл ~/.bashrc
внести следующие строки:
# enable bash completion in interactive shells if [ -f /etc/bash_completion ]; then . /etc/bash_completion fi
После этого автодополнение будет работать буквально везде, где только можно себе представить, например, при дополнении не только аргументов команд, но и их опций. Например, yum se [TAB]
даст:
$ yum search
Если в файл /etc/inpurc
(или в ~/inpurc
) добавить такие строки:
"e[A": history-search-backward
"e[B": history-search-forward
то набор части команды, например, cd /
, и последующий перебор стрелками Up и Down истории команд извелечёт из буфера истории только те аргументы команды cd
, которые начинались от корня файловой иерархии.
Главная
Содержание . .