Если вы изучаете скрипты Bash, читая чужой код, вы могли заметить, что первая строка скриптов начинается с символов #! и пути к интерпретатору Bash.
Эта последовательность символов ( #!) называется shebang и используется, чтобы сообщить операционной системе, какой интерпретатор использовать для анализа остальной части файла.
Директива интерпретатора Shebang
Директива интерпретатора Shebang имеет следующий вид:
#!interpreter [arguments]
- Директива должна быть первой строкой в скрипте.
- Директива должна начинаться с Shebang #!
- Пробел после символов Shebang не является обязательным.
- Интерпретатор – это полный путь к двоичному файлу (например /bin/sh, /bin/bash).
- Аргументы интерпретатора являются необязательными.
Примеры:
- #!/bin/bash- Использует bash для разбора файла.
- #!/usr/bin/env perl- Использует команду env, чтобы найти путь к исполняемому файлу perl.
- #!/usr/bin/python – Выполняет файл, используя двоичный файл python.
Использование Shebang в скриптах Bash
Если shebang не указан и пользователь, выполняющий сценарий Bash, использует другую оболочку, сценарий будет проанализирован любым интерпретатором по умолчанию, который используется этой оболочкой. Например, интерпретатор по умолчанию для bashis bash и for zshis sh. Чтобы ваш скрипт всегда интерпретировался с помощью Bash, вам необходимо указать путь к исполняемому файлу с помощью shebang.
Есть два способа использовать директиву Shebang и установить интерпретатор.
- Используя абсолютный путь к двоичному файлу bash:
#!/bin/bash
- Используя утилиту env:
#!/usr/bin/env bash
Преимущество использования второго подхода состоит в том, что он будет искать исполняемый файл bash в пользовательской переменной среды $PATH. Если существует более одного пути bash, первый будет использоваться сценарием.
При использовании первой опции для добавления опции в поставку оболочки Bash передайте ее интерпретатору. Например, чтобы запустить скрипт в режиме отладки, вы бы использовали #!/bin/bash -x. Если вы используете метод env, вам нужно использовать set для объявления опции. Чтобы включить режим отладки, вы должны добавить set -x после строки shebang.
Пример скрипта
Давайте создадим простой скрипт с использованием shebang, который выведет «Hello, World». Откройте ваш текстовый редактор и вставьте следующую строку:
nano hello_world
#!/bin/bash echo "Hello, World"
Чтобы иметь возможность запускать скрипт без указания интерпретатора из командной строки, вам нужно сделать файл исполняемым:
chmod +x hello_world
Теперь, если вы можете запустить скрипт, набрав ./ после имени скрипта:
./hello_world
Hello, World
Переопределение Shebang
Если по какой-то причине вы хотите переопределить набор интерпретаторов в строке Shebang, вам нужно запустить скрипт, явно указав требуемую оболочку.
Например, чтобы запустить сценарий, #!/bin/sh указанный в строке Shebang, с помощью оболочки bash, введите:
bash hello_world
Обратите внимание, что не стоит переопределять интерпретатор оболочки, так как это может привести к неожиданному поведению скрипта.
Заключение
К настоящему времени вы должны хорошо понимать, что такое Shebang и как использовать его в ваших скриптах Bash.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.