Shebang и запуск скрипта
Превращаем набор команд в файл-скрипт, который можно запускать как программу.
Shebang — это первая строка скрипта вида
#!/usr/bin/env bash, которая говорит системе, какой программой исполнять файл.
Скрипт — это просто файл с командами
Если вы выполняете одни и те же команды по очереди, их можно сложить в текстовый файл — это и есть скрипт. Создадим hello.sh:
#!/usr/bin/env bash
echo "Привет из скрипта!"
dateПервая строка — shebang. Дальше обычные команды, по одной на строку. Расширение .sh не обязательно, но помогает понять, что это shell-скрипт.
Почему именно #!/usr/bin/env bash
Символы #! в начале файла — это сигнал ядру: «дальше идёт путь к интерпретатору». Можно написать #!/bin/bash, но Bash не всегда лежит в /bin (например, на некоторых системах он в /usr/local/bin). Конструкция #!/usr/bin/env bash просит env найти Bash по PATH — это переносимее.
Три способа запустить скрипт
Способ первый — передать файл явно интерпретатору. Права на запуск не нужны:
bash hello.shСпособ второй — сделать файл исполняемым и запустить напрямую. Тут как раз и срабатывает shebang:
chmod +x hello.sh
./hello.shВывод:
Привет из скрипта! Пн 22 июн 2026 14:03:11 MSK
Способ третий — source hello.sh (или . hello.sh) — выполняет команды в текущей оболочке, а не в новом процессе. Это нужно, когда скрипт меняет переменные окружения, которые должны остаться после его завершения.
Зачем ./ перед именем
Если просто написать hello.sh, Bash будет искать программу в PATH и не найдёт её в текущей папке (по соображениям безопасности текущая папка в PATH не входит). Префикс ./ явно говорит: «файл здесь, рядом».
Как работает под капотом
Когда вы запускаете ./hello.sh, ядро открывает файл, видит #!, читает путь к интерпретатору и фактически выполняет /usr/bin/env bash ./hello.sh. То есть shebang — это инструкция не для Bash, а для ядра операционной системы. Поэтому он обязан быть в самой первой строке, без пробела перед #!.
Файл: hello.sh
┌─────────────────────────┐
│ #!/usr/bin/env bash │ ◀── строка 1: кем исполнять
│ echo "Привет" │
│ date │
└─────────────────────────┘
│ ./hello.sh
▼
Ядро читает #! ──▶ запускает bash hello.shЧастые ошибки
- Забыли chmod +x. При запуске
./hello.shполучитеPermission denied. Либо дайте права, либо запускайте черезbash hello.sh. - Пробел или пустая строка перед shebang. Тогда
#!уже не в первой позиции и не сработает. - Перенос строк Windows (CRLF). Невидимый символ
\rв конце shebang ломает запуск с ошибкойbad interpreter. Лечится переводом файла в формат Unix (LF).
Итог
- Скрипт — текстовый файл с командами, первая строка — shebang.
#!/usr/bin/env bashпереносимее, чем жёсткий#!/bin/bash.- Запуск:
bash file.sh, илиchmod +xплюс./file.sh, илиsource file.shв текущей оболочке.