
Если вы изучаете скрипты Bash, читая код других людей, вы могли заметить, что первая строка в скриптах начинается с символов #! и пути к интерпретатору Bash.
Эта последовательность символов ( #! ) называется шебангом и используется для того, чтобы сообщить операционной системе, какой интерпретатор использовать для анализа оставшейся части файла.
Директива переводчика Шебанга
Директива интерпретатора Shebang имеет следующую форму:
#!interpreter [arguments]
- Директива должна быть первой строкой в скрипте.
- Директива должна начинаться с shebang
#! - Пробел после символов шебанга необязателен.
- Интерпретатор — это полный путь к двоичному файлу (например:
/bin/sh,/bin/bash). - Аргументы интерпретатора необязательны.
Примеры:
-
#!/bin/bash— Используетbashдля анализа файла. -
#!/usr/bin/env perl— Использует командуenvдля поиска пути к исполняемому файлуperl. -
#!/usr/bin/pythonВыполняет файл с использованием двоичного файлаpython.
Использование Shebang в скриптах Bash
Если шебанг не указан, а пользователь, запускающий скрипт Bash, использует другую оболочку, скрипт будет обработан интерпретатором по умолчанию, используемым этой оболочкой. Например, интерпретатор по умолчанию для bash — это bash , а для zsh — sh . Чтобы гарантировать, что ваш скрипт всегда будет интерпретироваться Bash, необходимо указать путь к исполняемому файлу с помощью шебанга.
Существует два способа использования директивы 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 с помощью оболочки bash , нужно ввести:
bash hello_world
Обратите внимание: не рекомендуется переопределять интерпретатор оболочки, так как это может привести к неожиданному поведению скрипта.
Заключение
К настоящему моменту вы должны хорошо понимать, что такое Shebang и как его использовать в своих скриптах Bash.
Если у вас есть вопросы или пожелания, не стесняйтесь оставлять комментарии.
Связанные руководства