Запуск скриптов
Тема дорожной карты · Bash
Bash-скрипт можно выполнить несколькими способами, каждый из которых имеет разные последствия для наследования окружения и области видимости. Запуск bash script.sh или ./script.sh (после chmod +x script.sh) запускает новый дочерний процесс Bash, поэтому переменные или функции, определённые внутри скрипта, не влияют на вызывающую оболочку. Подключение скрипта через . script.sh или source script.sh выполняет его команды внутри текущего процесса оболочки, что позволяет определять переменные окружения или функции, сохраняющиеся после завершения скрипта, — этот приём широко используется в скриптах настройки в рамках автоматизации Linux. Запуск скрипта через exec bash script.sh полностью заменяет текущий процесс, что полезно в точках входа контейнеров и сценариях инициализации, где необходима чистая подстановка процесса. Понимание этих режимов выполнения — дочерний процесс, подключение через source и exec — необходимо для написания корректных Bash-скриптов и избежания трудноуловимых ошибок окружения при автоматизации Linux.
Как это работает
Запуск скриптов — Bourne-Again SHell, дефолтный login shell на большинстве Linux-дистрибутивов. Это и интерактивный интерпретатор, и скриптовый язык. Скрипты начинаются с #!/usr/bin/env bash (или #!/bin/bash для явного пути). Shell парсит ввод в токены, делает расширения (параметры, command substitution, glob), исполняет команды, ловит exit-коды. Современные альтернативы (zsh, fish) хороши интерактивно, но bash остаётся lingua franca для скриптов.
Когда применять
Bash — для shell-автоматизации, которая должна работать на любом Linux/macOS-боксе (zsh+ не гарантирован). #!/usr/bin/env bash лучше #!/bin/sh, когда нужны bash-фичи (массивы, [[ ]], process substitution). Переходите на Python/Go, когда скрипт >~200 строк, нужны структурированные данные или надёжная обработка ошибок. Всегда set -euo pipefail + IFS=$'\n\t' в начале.
Типичные ошибки
Ловушки Запуск скриптов: путаница bash и sh (POSIX sh беднее — dash на Debian дефолтный /bin/sh); не обрабатывают ошибки (дефолт продолжает после сбоев); bash-скрипты с расчётом на GNU coreutils (sed -i "" vs sed -i) ломаются на macOS; алиасы внутри скриптов (фича интерактивного shell).
Связанные понятия
Полезные ресурсы
Проверить знания (1)
Загрузка вопросов…