Если вы изучаете сценарии 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, использует другую оболочку, сценарий будет проанализирован любым интерпретатором по умолчанию, используемым этой оболочкой. Например, интерпретатором по умолчанию для bash
является bash
а для zsh
— sh
. Чтобы ваш скрипт всегда интерпретировался с помощью Bash, вам необходимо указать путь к исполняемому файлу с помощью shebang.
Есть два способа использовать директиву Shebang и установить интерпретатор.
- Используя абсолютный путь к двоичному файлу bash:
#!/bin/bash
- Используя утилиту
env
:#!/usr/bin/env bash
Преимущество использования второго подхода заключается в том, что он будет искать исполняемый файл bash
в $PATH
окружения $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, вам необходимо запустить сценарий, явно указав желаемую оболочку.
Например, чтобы запустить сценарий, в котором #!/bin/sh
указан в строке Shebang, используя оболочку bash
вы должны ввести:
bash hello_world
Учтите, что переопределять интерпретатор оболочки не рекомендуется, поскольку это может привести к неожиданному поведению сценария.
Выводы
К настоящему времени вы должны хорошо понимать, что такое Shebang и как использовать его в ваших сценариях Bash.
Добавить комментарий