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, которые начинались от корня файловой иерархии.


Главная
Содержание

. .