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

Ответ

Шебанг (shebang) — это последовательность символов #! в начале исполняемого файла скрипта, которая указывает системе, какой интерпретатор использовать для его выполнения. Формат: #!/путь/к/интерпретатору [аргументы].

Пример для bash-скрипта:

#!/bin/bash
echo "Hello, World!"

Ключевые особенности:

  • Должен быть первой строкой файла.
  • Путь к интерпретатору должен быть абсолютным.
  • Файл должен иметь права на исполнение (chmod +x script.sh).

Распространённые варианты:

  • #!/bin/sh — для POSIX-совместимого shell.
  • #!/usr/bin/env python3 — более переносимый способ, так как env ищет интерпретатор в переменной PATH.
  • #!/usr/bin/perl — для Perl-скриптов.

С точки зрения DevOps: Шебанг критически важен для создания переносимых и надёжных скриптов автоматизации (например, для CI/CD пайплайнов, скриптов развёртывания или мониторинга), так как гарантирует использование правильной версии интерпретатора в различных окружениях.

Ответ 18+ 🔞

Давай разберём эту штуку, которая выглядит как решётка с восклицательным знаком. Это шебанг, и он, блядь, архиважен, если ты не хочешь, чтобы твои скрипты превращались в тыкву на другом сервере.

Представь, ты написал скрипт на баше, а система, ёпта, пытается его запустить через sh или ещё какую-нибудь оболочку-мартышлюшку. Результат? Ошибки, несовместимость, и ты сидишь с удивлением пиздец, челя за бошку думай. Вот чтобы такого не было, в самую первую строку файла пишешь эту магию: #!/путь/к/интерпретатору. Система увидит это и скажет: «Ага, понял, запускаем через этого чувака».

Вот тебе классика для баша:

#!/bin/bash
echo "Hello, World!"

А теперь главные правила, которые надо зарубить на носу:

  • Это обязательно должна быть самая первая строчка в файле. Никаких пробелов перед ней, иначе это просто комментарий, и система проигнорирует.
  • Путь к интерпретатору пиши абсолютный. Не bash, а именно /bin/bash. Иначе опять же, будет тебе хиросима.
  • И да, не забудь дать файлу права на выполнение, а то какой смысл? chmod +x script.sh — и жизнь налаживается.

Какие бывают варианты, чтобы не выглядеть как полный ламер:

  • #!/bin/sh — если хочешь быть максимально портативным и писать под самый базовый shell. Но осторожно, там функционала — хуй с горы.
  • #!/usr/bin/env python3 — вот это, чувак, хитрая жопа! Это золотой стандарт для переносимости. Вместо жёсткого пути, ты говоришь системе: «Эй, env, найди-ка мне в переменной PATH интерпретатор python3». Так скрипт заработает и у тебя на ноуте, и на продакшн-сервере, где питон стоит в другом месте.
  • #!/usr/bin/perl — для старых, добрых перловых скриптов, которые ещё где-то валяются.

С точки зрения DevOps: Это не просто синтаксический сахар, это, блядь, фундамент. Когда ты пишешь скрипты для CI/CD, деплоя или мониторинга, ты должен быть на 100% уверен, что они запустятся в любом окружении — в докере, на дев-машине, на продакшне. Правильный шебанг — это первый шаг к тому, чтобы не получить ночью алерт, потому что твой скрипт накрылся медным тазом из-за того, что в продакшне стоит bash 4.2, а у тебя локально 5.0. Доверия к скриптам без шебанга — ебать ноль.