продолжение перевода статьи Linux Fundamentals Part 3 начало...

Настройка окружения пользователя

Введение в "fortune"

Ваш shell имеет множество полезных опций, которые вы можете настроить согласно вашим предпочтениям. Пока, однако, мы не обсуждали какой либо способ делать так, чтобы эти параметры настраивались автоматически каждый раз, когда мы входим в систему, исключая повторного ввода их каждый раз. В этом разделе, мы рассмотрим, как настроить ваше пользовательское окружение с помощью изменения файла startup Сначала давайте добавим дружеское приветствие для вашего первого входа в систему. Чтобы увидеть ваше приветствие напечатайте fortune:

$ fortune
No amount of careful planning will ever replace dumb luck.

.bash_profile

Теперь, давайте настроим fortune так, чтобы оно выходило каждый раз при входе в систему. С помощью вашего любимого текстового редактора, отредактируйте файл называемый  . bash_profile в вашей домашней директории. Если, этого файла не существует, создайте его. Вставьте строку в верху: fortune Выйдете из системы и опять войдите в нее. Если вы не используете дисплей менеджер подобно xdm, gdm, или kdm, вы будете приветствованы фразой которую вы вставили в файл:

mycroft.flatmonk.org login: chouser
Password:
Freedom from incrustations of grime is contiguous to rectitude.
$

Оболочка входа

Когда bash стартует, он выполняет файл .bash_profile в вашей домашней директории , исполняя каждую строку, так, как если бы это было напечатано в командной строке. Это называется поиск файлов. Bash делает что либо в зависимости от того как он запущен. Если он запущен как a login shell , он действует подобно выше описанному – сначала выполняет системный файл /etc/profile, а затем ваш персональный ~/.bash_profile Существует 2 способа запустить bash как login shell. Первый используется, когда вы входите в систему первый раз: bash стартует с именем процесса -bash. Вы можете видеть это в вашем листинге процессов:

$ ps u
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
chouser 404 0.0 0.0 2508 156 tty2 S 2001 0:00 -bash

Вы, вероятно, увидите более длинный листинг, но у вас как минимум будет одна COMMAND c тире перед именем вашего shell, подобно -bash в примере выше. Это тире используется shell для определения того, что shell запущен как login shell.

Понимание --login

Второй путь указать shell, работать как login shell, запустить его в командной строке с аргументом --login. Это используется каждый раз эмулятором терминала(например xterm), чтобы сделать вашу сессию bash подобно initial login sessions. После того, как вы вошли в систему, может быть запущено несколько копий вашей оболочки. Не зависимо от того, запущена ли ваша оболочка с --login или имеет тире перед именем процесса, эта сессия не может быть инициализирующей сессией оболочки. Даже если оболочка дает вам командную строку, тем не менее , она называется интерактивной оболочкой. Если bash запускается интерактивно, а не инициализирующее , она будет игнорировать /etc/profile и ~/.bash_profile а вместо этого исполнит ~/.bashrc

interactiv login profile rc
yes yes source ignore
yes no ignore source
no yes source ignore
no no ignore ignore
Проверка интерактивности

Каждый раз bash исполняет ваш ~/.bashrc даже, несмотря на то, что он не интерактивен, например, в таких случаях как запуск команд rsh или scp. Очень важно помнить об этом, потому что вывод текста, подобно тому, как мы видели в примере с командой fortune недавно, может испортить эту не интерактивную bash сессию. Хорошей идеей является использование переменной PC1, для определения, является ли текущая оболочка интерактивной перед выводом текста из startup файла:

if [ -n "$PS1" ]; then fortune fi

/etc/profile и /etc/skel
Как системный администратор, вы должны всегда держать файл в нормальном состоянии. Так как он исполняется всеми кто первый раз входит в систему, становиться очень важным, содержать его в рабочем состоянии. As a system administrator, you are in charge of /etc/profile . Since it is sourced by everyone when they first log in, it is important to keep it in working order. It is also a powerful tool in making things work correctly for new users as soon as they log into their new account. Тем не менее, есть некоторые настройки, которые вы захотите оставить для новых пользователей, настройками по умолчанию, а также позволить им менять их легко и просто. Эти настройки содержатся в директории /etc/skel. Когда вы используете команду useradd для создания нового аккаунта, она копирует все файлы из /etc/skel в домашнюю директорию нового пользователя. Это значит, что вы можете положить полезные .bash_profile и .bashrc файлы в /etc /skel для хорошего старта новых пользователей.
export

Переменные bash могут быть установлены таким образом, что они будут оставаться одинаковыми для всех, вновь запущенных оболочек; это называется экспортированием. Вы , можете просмотреть все переменные, которые установлены для экспорта, в вашей сессии оболочки:

$ export
declare -x EDITOR="vim"
declare -x HOME="/home/chouser"
declare -x MAIL="/var/spool/mail/chouser"
declare -x PAGER="/usr/bin/less"
declare -x PATH="/bin:/usr/bin:/usr/local/bin:/home/chouser/bin"
declare -x PWD="/home/chouser"
declare -x TERM="xterm"
declare -x USER="chouser"

Установка переменных для экспорта

Если переменные не экспортированы, каждая вновь запущенная оболочка не будет иметь эти переменные инициализированными. Тем не менее, вы можете, экспортировать их с помощью команды export :

$ FOO=foo
$ BAR=bar
$ export BAR
$ echo $FOO $BAR
foo bar
$bash
$ echo $FOO $BAR
bar

В этом примере, обе переменные FOO и BAR инициализированы, но только переменная BAR экспортирована. Таким образом, вновь запущенный bash не будет знать значение переменной FOO. Если же вы выйдете из этого нового bash, то увидите , что в первом обе переменные сохранили свои значения:

$ exit
$ echo $FOO $BAR
foo bar

Экспортирование и установка -x

Because of this behavior, variables can be set in ~/.bash_profile or  /etc/profile and marked for export, and then never need to be set again. There are some options that cannot be exported, however, and so they must be put in put in your ~/.bashrc  and your profile in order to be set consistently. These options are adjusted with the set built-in:

$ set -x

При установленной опции -х bash печатает все исполняемые команды:

$ echo $FOO
$ echo foo
foo

Это может быть очень полезно, для того чтобы ограничить неожиданное поведение или подобных странностей. Для отключения опции –х, установите set +x. Для дополнительной информации обратитесь к man странице.

Установка переменной с помощью “set”

Команда set может быть также использована для установки переменной, но использование такой конструкции не обязательно. Команда bash set FOO=foo, окажет тот же самый эффект, что и FOO=foo. Уничтожение переменной FOO производится с помощью команды unset:

$ FOO=bar
$ echo $FOO
bar
$ unset FOO
$ echo $FOO
Unset vs. FOO=

Это не то же самое, что установка переменной в "ничто", хотя, иногда трудно уловить разницу. Один из способов сделать это, использовать команду set без параметров:

$FOO=bar
$ set | grep ^FOO
FOO=bar
$ FOO=
$ set | grep ^FOO
FOO=
$ unset FOO
$ set | grep ^FOO

Using set with no parameters like this is similar to using the  export built-in, except that set lists all variables instead of just those marked for export.

Экспортирование переменных для изменения поведения команд

Часто, поведение команд может быть изменено установкой переменных окружения. Подобно новой сессии bash, другая программа, запущенная из вашей строки bash, будет способна читать только экспортированные переменные. Например, команда man, проверяет переменную PAGER как программа использует перелистывание страницы за раз:

$ PAGER=less
$ export PAGER
$ man man

При установке переменной PAGER=less, вы будете просматривать одну страницу при каждом нажатии клавиши пробел. Если же будет установлено PAGER=cat, текст будет отображен на экране сразу без остановки.

$ PAGER=cat
$ man man

Использование "env"

К несчастью, если вы забудете установить переменную PAGER в less, man( также как и другие прграммы) будет продолжать прокручивать весь свой текст на экране без остановки. Если вы хотите чтобы PAGER был установлен в cat как прежде , вы можете использовать команду env:

$ PAGER=less
$ env PAGER=cat man man
$ echo $PAGER
less

После этого cat значение переменной PAGER экспортировано в man , но само значение переменной не поменялось в этой сесии bash.

конец перевода статьи Linux Fundamentals Part 3 далее...