Команда source в Linux: как использовать и отличия от bash

Что делает source — кратко
source — это встроенная команда оболочки (shell builtin), которая читает и выполняет команды из указанного файла в контексте текущей оболочки. Простая формула:
- Читает содержимое файла как набор команд оболочки.
- Выполняет их в текущем процессе оболочки (без fork).
- Все изменения окружения (export, unset, определение функций) применяются к текущей сессии.
Определение: «встроенная команда» — команда, реализованная самой оболочкой, а не отдельной программой в /bin.
Пример: выполнить команды из файла
Создайте файл и запишите в него простые команды:
# Создаём файл и редактируем его
touch test.txt
vi test.txt
# Внутри test.txt напишите:
echo "Hello!"
pwd
ls
# Сохраняем файл и выполняем его в текущей оболочке
source test.txt
# или эквивалентно
. test.txtПосле выполнения вы увидите вывод команд (Hello!, текущая директория, список файлов). На изображении ниже показан пример вывода при ‘sourcing’ файла.
Как source влияет на переменные окружения
По умолчанию дочерний процесс не может изменить окружение родителя. Пример без source:
export TEST="deb"
vi example
# Внутри example напишите:
export TEST="bed"
echo $TEST
# Сохраняем, делаем исполняемым и запускаем
chmod +x example
./example # выведет: bed
echo $TEST # в родительской оболочке: debТот же файл, выполненный через source, изменит переменную в текущей оболочке:
# Создаём файл test_file с тем же содержимым
vi test_file
# Внутри test_file:
export TEST="bed"
echo $TEST
# Выполняем через source
. test_file # или: source test_file
echo $TEST # теперь выведет: bedВажно: source применим к любой команде оболочки — экспорт, алиасы, определение функций, изменение cwd (cd) и т.п. Всё это останется в текущей сессии.
Разница между bash и source
| Что делает | bash | source |
|---|