Гид по технологиям

Команда source в Linux — как выполнять скрипты и изменять среду Bash

5 min read Linux Обновлено 12 Apr 2026
Команда source в Linux — использовать и отличия
Команда source в Linux — использовать и отличия

Команда neofetch в Linux

Source — это встроенная команда оболочки, которая принимает файл в качестве аргумента, читает его содержимое и выполняет содержащиеся в нём команды в текущем процессе оболочки. На многих системах её синонимом является точечная нотация: . <путькфайлу>. Это отличие от запуска скрипта как отдельного процесса (например, через bash ./скрипт), где изменения среды происходят в дочернем процессе и не влияют на родителя.

Когда использовать source

  • Загрузить переменные окружения в текущую сессию (например, API-ключи, PATH).
  • Подключить функции или алиасы, определённые в файле, чтобы использовать их сразу.
  • Подготовить окружение перед сборкой или запуском (например, load-project-env).

Выполнение команд из файла с помощью source

Ниже шаги и примерный рабочий процесс для теста:

# Создаём файл и открываем его в редакторе
touch test.txt
vi test.txt

# Внутри test.txt пишем команды:
echo "Hello!"
pwd
ls

# Сохраняем и выполняем:
. test.txt     # точка — альтернатива source
source test.txt

В результате команды внутри файла выполнены в текущей оболочке и их вывод появляется в том же терминале.

Вывод после выполнения файла через source

Совет: если команда test.txt не исполняется как программа (без shebang и права +x), использование source или . — самый простой способ выполнить её содержимое без изменений прав.

Изменение среды Bash с помощью source

Важно понимать поведение переменных окружения при порождении процессов.

Пример, демонстрирующий разницу между обычным запуском скрипта и его source:

export TEST="deb"
vi example

# В файле example:
export TEST="bed"
echo $TEST

# Отдельный запуск
chmod +x example
./example  # выведет "bed" в дочернем процессе
echo $TEST # выведет "deb" в родительской оболочке

# Запуск через source
. example  # или source example
echo $TEST # теперь выведет "bed" — переменная обновлена в текущей оболочке

Вывод: если нужно, чтобы изменения переменных, функций или алиасов остались в текущей сессии, используйте source.

Использование source для обновления переменных окружения

Разница между bash и source

  • bash ./скрипт — запускает новый процесс Bash. Изменения среды остаются в дочернем процессе.
  • source ./скрипт — интерпретирует команды внутри текущей оболочки. Изменения сохраняются в текущей сессии.

Практическая подсказка: используйте bash для изолированного выполнения и source для внесения изменений в текущую среду.

Частые ошибки и устранение неисправностей

  1. Ошибка “source not found” или команда не распознаётся.

    • Причина: вы используете оболочку, в которой нет встроенной команды source (например, dash в POSIX-режиме).
    • Решение 1: используйте точечную нотацию . file (работает в большинстве POSIX-совместимых оболочек).
    • Решение 2: смените оболочку командой chsh -s $(which bash) и откройте новый терминал.
  2. Файл не выполняет эффекта на родительскую оболочку.

    • Проверьте, что вы действительно используете source или . — если выполняете ./файл, изменения будут локальны для дочернего процесса.
    • Убедитесь, что в файле нет команды exit, которая закроет текущую оболочку при source.
  3. Права доступа и shebang.

    • При source права +x и shebang не требуются: файл читается как набор команд.

Альтернативные подходы

  • export VAR=value напрямую в интерактивной сессии, если это разовое изменение.
  • Использовать env-file и команду direnv для переключения окружений проекта автоматически.
  • Выполнить скрипт в отдельном процессе и передавать результаты через stdout/stdin или временные файлы, если нужно изолировать изменения.
  • Для автоматизации CI/CD лучше явно экспонировать переменные в контексте конвейера, а не source конфигурации локальной оболочки.

Ментальная модель (как думать о source)

Представьте оболочку как комнату. Запуск ./скрипт — это приглашение гостя в новую комнату (дочерний процесс): он может сделать всё внутри, но его изменения не затронут вашу комнату. Source — это приглашение того же гостя работать прямо у вас: он переставляет мебель (переменные/функции) в вашей комнате.

Мини‑методология: безопасное тестирование скриптов при source

  1. Проверяйте скрипт на предмет exit и cd — они повлияют на вашу сессию.
  2. Тестируйте сначала в новой вкладке терминала: source file; если что-то пошло не так — закройте вкладку.
  3. Используйте set -u и set -e локально в скрипте для ловли ошибок, но помните, что set -e в sourced-файле может завершить вашу оболочку.
  4. Для безопасных изменений импортируйте в функцию: source файл, который определяет функцию; затем вызывайте функцию вручную.

Роль‑ориентированный чеклист

  • Разработчик:

    • [ ] Файл с настройками не содержит exit.
    • Переменные документированы и не конфликтуют с системными.
    • Используется .env.example для шаблона.
  • Системный администратор:

    • Проверена совместимость с /bin/sh или /bin/bash.
    • Прописаны права доступа и владельцы для файлов с секретами.
    • Применён direnv или аналог для изоляции окружений.
  • CI инженер:

    • Переменные окружения заданы в интерфейсе CI, а не source локальных файлов.
    • Если нужен source, то файл берётся из защищённого хранилища.

Сниппеты и шаблоны (cheat sheet)

Пример: файл env-setup.sh

# env-setup.sh
# Не ставьте тут exit или set -e без осознания последствий
export PROJECT_HOME="$HOME/projects/myapp"
export PATH="$PROJECT_HOME/bin:$PATH"
alias gs='git status'

# Функция, которую удобно держать в текущей оболочке
mkcd() { mkdir -p "$1" && cd "$1"; }

Загрузка:

# Загрузить в текущую сессию
source env-setup.sh
# или
. env-setup.sh

Короткий шаблон для безопасного source (защита от повторного исполнения):

# в файле config.sh
if [ -z "${_MYAPP_CONFIG_INCLUDED-}" ]; then
  _MYAPP_CONFIG_INCLUDED=1
  export VAR=...
fi

Когда source не подходит (контрпримеры)

  • Вы хотите изолировать выполнение и предотвратить влияние на текущую сессию (тогда запускайте через bash ./script).
  • Скрипт приходит из ненадёжного источника: лучше запускать в контейнере или sandboxes.
  • Нужна повторяемость в CI: храните переменные в настройках CI, а не source локальных файлов разработчика.

Критерии приёмки

  • Скрипт, который предполагается засовершиться через source, при загрузке создаёт ожидаемые переменные и функции.
  • Выполнение source не завершает сессию случайным exit.
  • Изменения видны в родительской оболочке после source.

Безопасность и конфиденциальность

  • Не храните секреты в файлах, доступных другим пользователям; лучше использовать менеджеры секретов.
  • Проверяйте права доступа (chmod 600) для файлов с приватными ключами или секретными токенами.

Дополнительные ресурсы и подходы для миграции

  • direnv — автоматическая загрузка окружения при переходе в директорию проекта.
  • systemd –user environment: для сервисов и фоновых задач лучше передавать переменные через systemd unit.

Короткий глоссарий

  • source: встроенная команда оболочки для выполнения содержимого файла в текущем процессе.
  • точечная нотация (.): синоним source в большинстве оболочек.
  • дочерний процесс: отдельный процесс, порождённый текущей оболочкой; его изменения окружения не поднимаются к родителю.

Краткое резюме

Source — простой и мощный способ изменить текущую оболочку: он полезен для загрузки переменных, алиасов и функций без форка. Используйте точку для совместимости, проверяйте содержимое файлов перед подключением и применяйте практики безопасности для конфиденциальных данных.


Важно: перед массовым использованием source в производственной среде согласуйте процессы с командой безопасности и автоматизируйте проверку содержания подключаемых файлов.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Настроить меню правого клика в Windows
Windows

Настроить меню правого клика в Windows

Группировать окна по приложениям в Mission Control
macOS

Группировать окна по приложениям в Mission Control

Google Docs для писателя: писать и форматировать книгу
Писательство

Google Docs для писателя: писать и форматировать книгу

Как создать уютный рабочий стол
Офис

Как создать уютный рабочий стол

Как скрыть синюю галочку в X (Twitter)
Социальные сети

Как скрыть синюю галочку в X (Twitter)

Фотосъёмка летающих птиц (BIF): техника и советы
Фотография

Фотосъёмка летающих птиц (BIF): техника и советы