Олег Марков
Shebang в Bash — полный разбор
Что такое shebang
Shebang — это первая строка скрипта вида:
#!/usr/bin/env bash
Она подсказывает ОС, каким интерпретатором запускать файл при вызове ./script.sh.
Зачем он нужен
Без shebang скрипт может выполниться не тем shell (например, sh вместо bash), и Bash-специфичные конструкции сломаются: массивы, [[ ]], source, mapfile.
Два основных варианта
1) Жёсткий путь
#!/bin/bash
Плюс: предсказуемо.
Минус: путь к bash может отличаться в разных окружениях.
2) Через env (рекомендуется)
#!/usr/bin/env bash
Плюс: ищет bash в PATH, лучше переносимость между Linux/macOS/CI.
Как shebang работает технически
Когда ты запускаешь файл как программу:
./deploy.sh
Ядро читает первые 2 байта #!, затем берёт путь интерпретатора из этой строки и запускает:
/usr/bin/env bash ./deploy.sh
Если интерпретатор не найден — получишь ошибку запуска.
Обязательные условия
- Shebang должен быть самой первой строкой файла.
- У файла должны быть права на исполнение:
chmod +x deploy.sh
- Не должно быть лишних символов перед
#!(включая BOM).
Частые ошибки
Ошибка 1: запуск через sh script.sh
Так ты обходишь shebang и принудительно запускаешь скрипт в sh.
Ошибка 2: CRLF в файле
На Linux может появиться bad interpreter. Лечится переводом в LF (dos2unix).
Ошибка 3: shebang не в первой строке
Любая пустая строка до shebang делает его нерабочим.
Практический шаблон
#!/usr/bin/env bash
set -euo pipefail
main() {
echo "Shebang настроен корректно"
}
main "$@"
Вывод
Shebang — базовый контракт запуска скрипта. Для большинства проектов безопасный дефолт:
#!/usr/bin/env bash
Так ты явно указываешь Bash и избегаешь проблем с совместимостью и «случайным» запуском в другом shell.