Использование Shebang в оболочке Bash

Если вы изучаете скрипты Bash, читая чужой код, вы могли заметить, что первая строка скриптов начинается с символов #! и пути к интерпретатору Bash.

Эта последовательность символов ( #!) называется 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, использует другую оболочку, сценарий будет проанализирован любым интерпретатором по умолчанию, который используется этой оболочкой. Например, интерпретатор по умолчанию для bashis bash и for zshis sh. Чтобы ваш скрипт всегда интерпретировался с помощью Bash, вам необходимо указать путь к исполняемому файлу с помощью shebang.

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

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

  2. Используя утилиту env:
    #!/usr/bin/env bash

Преимущество использования второго подхода состоит в том, что он будет искать исполняемый файл bash в пользовательской переменной среды $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.

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Делиться