Фундаментальные основы Linux. Часть III. Раскрытие команд командной оболочкой
Глава 12. Переменные командной оболочки
В данной главе мы познакомимся с методикой работы с переменными окружения с использованием командной оболочки. Эти переменные обычно требуются для работы приложений.
Символ доллара ($)
Еще одним важным интерпретируемым командной оболочкой символом является символ доллара $ . Командная оболочка будет искать переменную окружения с именем, соответствующим размещенной после символа доллара строке, и заменять данный символ и имя переменной на значение этой переменной (или ни на что в том случае, если переменной не существует).
Зависимость от регистра
Создание переменных
Кавычки
Команда set
Вы можете использовать команду set для вывода списка переменных окружения. В системах Ubuntu и Debian команда set также выведет список функций командной оболочки после списка переменных командной оболочки. Поэтому для ознакомления со всеми элементами списка переменных окружения при работе с данными системами рекомендуется использовать команду set | more .
Команда unset
Переменная окружения $PS1
Переменная окружения $PS1 устанавливает формат приветствия вашей командной оболочки. При вводе строки форматирования вы можете использовать обратный слэш для экранирования таких специальных символов, как символ \u , предназначенный для вывода имени пользователя, или \w , предназначенный для вывода имени рабочей директории. На странице руководства командной оболочки bash представлен полный список специальных символов.
Переменная окружения $PATH
Команда env
Команда env в случае использования без параметров выведет список экспортированных переменных окружения . Отличие данной команды от команды set с параметрами заключается в том, что команда set выводит список всех переменных окружения, включая те переменные, которые не экспортируются в дочерние командные оболочки.
Кроме того, команда env может также использоваться для запуска «чистой» командной оболочки (командной оболочки без наследования какого-либо окружения). Команда env -i позволяет очистить окружение дочерней командной оболочки.
Команда export
Разграничения переменных
Несвязанные переменные
В командной оболочке bash команда set -u идентична команде set -o nounset и, по аналогии, команда set +u идентична команде set +o nounset .
Практическое задание: переменные командной оболочки
1. Используйте команду echo для вывода строки «Привет», после которой должно следовать ваше имя. (Используйте переменную командной оболочки bash!)
2. Создайте переменную answer , значение которой равно 42.
3. Скопируйте значение переменной $LANG в значение переменной $MyLANG.
4. Выведите список используемых в данное время переменных командной оболочки.
5. Выведите список всех экспортируемых переменных командной оболочки.
6. Присутствует ли информация о вашей переменной в выводе команд env и set ?
7. Уничтожьте вашу переменную answer .
8. Создайте две переменные и экспортируйте одну из них.
9. Выведите значение экспортированной переменной в дочерней интерактивной командной оболочке.
10. Создайте переменную и присвойте ей значение ‘Dumb’, после чего аналогичным образом создайте другую переменную с значением ‘do’. Используйте команду echo и две созданные переменные для вывода слова ‘Dumbledore’.
11. Найдите список экранированных с помощью обратного слэша управляющих символов на странице руководства командной оболочки bash. Добавьте управляющий символ в значение переменной PS1 для вывода времени в приветствии командной оболочки.
Корректная процедура выполнения практического задания: переменные командной оболочки
1. Используйте команду echo для вывода строки «Привет», после которой должно следовать ваше имя. (Используйте переменную командной оболочки bash!)
2. Создайте переменную answer , значение которой равно 42.
3. Скопируйте значение переменной $LANG в значение переменной $MyLANG.
4. Выведите список используемых в данное время переменных командной оболочки.
5. Выведите список всех экспортируемых переменных командной оболочки.
6. Присутствует ли информация о вашей переменной в выводе команд env и set ?
7. Уничтожьте вашу переменную answer .
8. Создайте две переменные и экспортируйте одну из них.
9. Выведите значение экспортированной переменной в дочерней интерактивной командной оболочке.
10. Создайте переменную и присвойте ей значение ‘Dumb’, после чего аналогичным образом создайте другую переменную с значением ‘do’. Используйте команду echo и две созданные переменные для вывода слова ‘Dumbledore’.
11. Найдите список экранированных с помощью обратного слэша управляющих символов на странице руководства командной оболочки bash. Добавьте управляющий символ в значение переменной PS1 для вывода времени в приветствии командной оболочки.
Set команда в linux
Запущенный без опций set показывает все shell-переменные и переменные среды (только в POSIX -режиме) в формате NAME=VALUE
Атрибуты
Атрибуты показанные ниже включаются так -X , а выключаются +X . (Такая перевернутая схема включения/выключения пришла в bash исторически, т.к. опции обычно включались в виде -X . Прямо как с электрическим зарядами)
Флаг | Название опции | Описание |
---|---|---|
-a | allexport | Автоматически отмечает измененные переменные. Automatically mark new and altered variables to be exported to subsequent environments. |
-b | notify | Не ждет нажатия enter чтобы оповестить о завершившемся в фоне job-е. (Оповещения работают только для управления job-ами) |
-e | errexit | When set, the shell exits when a simple command in a command list exits non-zero ( FALSE ). This is not done in situations, where the exit code is already checked ( if , while , until , || , && ) |
-f | noglob | Отменяет развертывание путей и имен файлов (globbing) |
-h | hashall | Запоминает абсолютное расположение команды если она вызывалась, и использует в следующий раз этот путь (хеширование). Включено по-умолчанию. (см checkhash из списка опций shopt) |
-k | keyword | Разрешает подставлять значение перемернной среды окружения везде в командной строке, а не только во время вызова команды. |
-m | monitor | Monitor mode. При управлении job-ами будет выведено короткое описание завершенного в фоне задания. По-умолчанию включено для для интерактивных оболочек с управлением job-ами. |
-n | noexec | Читает и парсит команды из скрипта, но не исполняет их. Полезно для проверки сценария на предмет синтаксических ошибок. Игнорируется интерактивными оболочками. |
-o | Устаналивает или снимает опцию по её длинному имени. Например set -o noglob . Если никакой опции не задано, то выводится список всех опций и их статус. | |
-p | privileged | Включает привилегированный режим. |
-t | onecmd | Выходит после чтения и выполнения одной команды. |
-u | nounset | Рассматривает сброс (unset) переменной как ошибку при выполнении parameter expansion. Неинтерактивные оболочки завершают свое выполнение при такой ошибке. |
-v | verbose | Выводит прочитанные или введенные строки при выполнении. Полезно при отладке. |
-x | xtrace | Режим отладки. Перед выполнением команды печатает её со всеми уже развернутыми подстановками и вычислениями. |
-B | braceexpand | Оболочка осуществляет раскрытие скобок. разворачивание (раскрытие) скобок. Эта опция включена по-умолчанию. |
-C | noclobber | Не перезаписывает файлы в операциях перенаправлениях потока. Вы можете обойти это ограничение используя оператор перенаправления >| там где это необходимо. Смотрите перенаправления |
-E | errtrace | ERR -ловушки будут наследоваться функциями оболочки, подстановками команд и командами которые выполняются в окружении подоболочки. |
-H | histexpand | Разрешены подстановки из истории команд ( ! -style). По умолчанию включено для интерактивных оболочек. |
-P | physical | Не следовать по симлинкам когда изменяются директории, use the physical filesystem structure. |
-T | functrace | DEBUG — и RETURN -ловушки будут унаследованы последующими средами. Аналогично как -E для ERR -ловушек. |
— | Означает «конец опций» — все следующие аргументы будут рассматриваться как позиционные параметры, даже если начинаются с минуса, как опции. | |
— | If no arguments follow, the positional parameters are unset. With arguments, the positional parameters are set, even if the strings begin with a — (dash) like an option. | |
Длинные опции, -o у которых нет короткого экивалента. | ||
emacs | Включает emacs -стиль для редактирования команд. По-умолчанию включена. | |
history | Ведется история команд. Включена по-умолчанию для интерактивных оболочек. | |
ignoreeof | Такой же эффект как и команды IGNOREEOF=10 . Смотрите shell variables. | |
nolog | (В настоящее время игнорируется. currently ignored) | |
pipefail | If set, the exit code from a pipeline is different to the normal («last command in pipeline») behaviour: TRUE when no command failed, FALSE when something failed (code of the rightmost command that failed) | |
posix | Когда эта опция установлена — Bash работает в режиме POSIX . | |
vi | Включает vi -стиль для редактирования команд. По-умолчанию включена. |
Примеры
Часть скрипта, который показывает как включить-выключить вывод отладочной информации в скрипте ( -x ):
Соображения относительно портируемости
Команда set ее основы поведения оболочки при измененных опциях определены POSIX®. Однако, есть опции, специфичные для Bash. Естественно они не переносимы.