Команда «.» (точка) или source
Команда «.» (точка) — это синоним команды source, встроенной в оболочку. Часто используется для включения внешних файлов внутри сценария. Рассмотрим в чём заключается суть такого включения на примере файла .bash_profile:
if [ -f ~/.bashrc ] ; then . ~/.bashrc fi
На второй строчке с помощью оператора «.» выполняется содержимое файла ~/.bashrc. Возникает вопрос, почему нельзя обойтись без точки?
Дело в том, что при использовании точки не создаётся копии оболочки — скрипт выполняется в текущей оболочке, причём все переменные, инициализированные в данном скрипте, после его завершения не исчезают, а сохраняются в окружении.
И наоборот, если скрипт запускается без использования точки, то создаётся копия оболочки, и по завершении скрипта в родительскую оболочку ничего не возвращается — все переменные окружения, созданные в скрипте, безвозвратно теряются.
Проиллюстрируем сказанное на простом примере. Создадим файл test.sh следующего содержания:
var="Какое-то значение" echo "Внутренняя переменная var = $var"
Если теперь запустить скрипт, то на экран будет выведено значение внутренней переменной скрипта var:
$ ./test.sh Внутренняя переменная var = Какое-то значение
Однако эта переменная не сохранится после завершения работы скрипта и не будет присутствовать в окружении текущей оболочки:
$ echo :$var: ::
Если же запустить скрипт с использованием точки, то он выполнится с тем же результатом. Только переменная var будет доступна среди переменных окружения текущей оболочки:
$ . ./test.sh Внутренняя переменная var = Какое-то значение $ echo :$var: :Какое-то значение:
Дочерняя копия оболочки при использовании точки создаётся только в том случае, когда процесс запускается в фоновом режиме. Это единственное исключение из общего правила.
Поиск: Bash • CLI • Linux • source • Команда • Окружение • Точка