shebang - это указание загрузчику использовать программу, указанную после #!
, в качестве интерпретатора для рассматриваемого файла при попытке его выполнения.Таким образом, если вы попытаетесь запустить файл с именем foo.sh
, который имеет #!/bin/bash
вверху, фактическая команда, которая запускается, будет /bin/bash foo.sh
.Это гибкий способ использования разных переводчиков для разных программ.Это то, что реализовано на системном уровне, а API уровня пользователя - это соглашение Шебанга.
Также стоит знать, что шебанг - это магическое число - читаемое человеком, которое идентифицирует файл как скрипт для данного интерпретатора.
Ваша точка зрения о том, что он "работает" даже без шебанга, заключается только в том, что рассматриваемая программа является сценарием оболочки, написанным для той же оболочки, что и та, которую вы используете.Например, вы могли бы очень хорошо написать файл javascript, а затем поместить #! /usr/bin/js
(или что-то подобное), чтобы иметь javascript «Shell script».