Что такое шебанг (shebang) в Bash

Если вы изучаете сценарии 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 а для zshsh . Чтобы ваш скрипт всегда интерпретировался с помощью Bash, вам необходимо указать путь к исполняемому файлу с помощью shebang.

Есть два способа использовать директиву Shebang и установить интерпретатор.

  1. Используя абсолютный путь к двоичному файлу bash:
    #!/bin/bash
  2. Используя утилиту env :
    #!/usr/bin/env bash

Преимущество использования второго подхода заключается в том, что он будет искать исполняемый файл bash в $PATH окружения $PATH . Если существует более одного пути к bash , скрипт будет использовать первый из них.

При использовании первого параметра для добавления параметра в оболочку Bash передайте его интерпретатору. Например, чтобы запустить сценарий в режиме отладки, вы должны использовать #!/bin/bash -x . Если вы используете метод env вам нужно использовать set для объявления опции. Чтобы включить режим отладки, вы должны добавить set -x после строки shebang.

Пример сценария

Давайте создадим простой скрипт с помощью shebang, который напечатает «Hello, World». Откройте текстовый редактор и вставьте следующую строку:

nano hello_world
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.

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

Оставьте комментарий