Если вы изучаете сценарии 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.
Добавить комментарий