Команда «.» (точка) или 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 • Команда • Окружение • Точка