Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Содержание
Введение
Символ "#! ", используемый в вычислительной технике
The symbol "#! ", used in computing
В вычислительной технике shebang — это последовательность символов, состоящая из символов решётки и восклицательного знака в начале скрипта. Его также называют "sharp exclamation", "sha bang", "hashbang", "pound bang" или "hash pling". Когда текстовый файл с shebang используется как исполняемый файл в Unix-подобной операционной системе, механизм загрузки программы разбирает остальную часть первой строки файла как директиву интерпретатора. Загрузчик выполняет указанную программу-интерпретатор, передавая ей в качестве аргумента путь, который был первоначально использован при попытке запуска скрипта, чтобы программа могла использовать файл в качестве входных данных. Например, если скрипт имеет путь path/to/script и начинается со строки #!/bin/sh, то загрузчик программы получает инструкцию запустить программу /bin/sh, передавая path/to/script в качестве первого аргумента. Строка shebang обычно игнорируется интерпретатором, поскольку символ "#" является маркером комментария во многих языках сценариев; некоторые интерпретаторы языков, которые не используют решётку для начала комментариев, всё равно могут игнорировать строку shebang, учитывая её назначение.
In computing, a shebang is the character sequence consisting of the characters number sign and exclamation mark at the beginning of a script. It is also called sharp exclamation, sha bang, hashbang, pound bang, or hash pling. When a text file with a shebang is used as if it is an executable in a Unix like operating system, the program loader mechanism parses the rest of the file's initial line as an interpreter directive. The loader executes the specified interpreter program, passing to it as an argument the path that was initially used when attempting to run the script, so that the program may use the file as input data. For example, if a script is named with the path path/to/script, and it starts with the line #!/bin/sh, then the program loader is instructed to run the program /bin/sh, passing path/to/script as the first argument. The shebang line is usually ignored by the interpreter, because the "#" character is a comment marker in many scripting languages; some language interpreters that do not use the hash mark to begin comments still may ignore the shebang line in recognition of its purpose.
Сильные стороны
По сравнению с использованием глобальных списков ассоциаций между расширениями файлов и приложениями, выполняющими их интерпретацию, метод директивы интерпретатора позволяет пользователям использовать интерпретаторы, не зарегистрированные на уровне всей системы, и без прав администратора. Он также обеспечивает возможность выбора конкретного интерпретатора, не перегружая пространство имен расширений файлов (когда одно расширение файла связано с несколькими типами файлов), и позволяет изменить язык реализации скрипта, не меняя синтаксис его вызова из других программ. Программы, запускающие скрипт, не должны знать, на каком языке он реализован, поскольку сам скрипт отвечает за указание используемого интерпретатора.
When compared to the use of global association lists between file extensions and the interpreting applications, the interpreter directive method allows users to use interpreters not known at a global system level, and without administrator rights. It also allows specific selection of interpreter, without overloading the filename extension namespace (where one file extension refers to more than one file type), and allows the implementation language of a script to be changed without changing its invocation syntax by other programs. Invokers of the script need not know what the implementation language is as the script itself is responsible for specifying the interpreter to use.
Магическое число
Шебанг — это, по сути, удобочитаемое человеком представление магического числа в исполняемом файле, магическая байтовая строка которого — , два символа, кодирующие в ASCII. Это магическое число обнаруживается семейством функций "exec", которые определяют, является ли файл скриптом или исполняемым двоичным файлом. Наличие шебанга приводит к выполнению указанного исполняемого файла, как правило, интерпретатора для языка скрипта. Утверждалось, что некоторые старые версии Unix ожидают, что за обычным шебангом следует пробел и косая черта , но, по-видимому, это не так;
The shebang is actually a human readable instance of a magic number in the executable file, the magic byte string being , the two character encoding in ASCII of This magic number is detected by the "exec" family of functions, which determine whether a file is a script or an executable binary. The presence of the shebang will result in the execution of the specified executable, usually an interpreter for the script's language. It has been claimed that some old versions of Unix expect the normal shebang to be followed by a space and a slash , but this appears to be untrue;
Этимология
Исполняемый файл, начинающийся с директивы интерпретатора, обычно называют скриптом, часто с указанием имени или общей категории используемого интерпретатора. Название "shebang" для этих двух характерных символов, возможно, произошло от неточного сокращения "SHArp bang" или "haSH bang", отсылающих к двум типичным названиям этих символов в Unix. Другая версия гласит, что "sh" в "shebang" происходит от стандартной оболочки sh, которая обычно вызывается с помощью shebang. Это употребление было зафиксировано к декабрю 1989 года и, вероятно, появилось раньше.
An executable file starting with an interpreter directive is simply called a script, often prefaced with the name or general classification of the intended interpreter. The name shebang for the distinctive two characters may have come from an inexact contraction of SHArp bang or haSH bang, referring to the two typical Unix names for them. Another theory on the sh in shebang is that it is from the default shell sh, usually invoked with shebang. This usage was current by December 1989, and probably earlier.
История
Шембанг был представлен Деннисом Ричи между седьмым и восьмым изданиями Unix в Bell Laboratories. Он также был добавлен в релизы BSD от Berkeley's Computer Science Research (присутствовал в 2.8BSD и активирован по умолчанию в 4.2BSD). Поскольку AT&T Bell Laboratories Edition 8 Unix и последующие издания не были выпущены в открытый доступ, первое широкое распространение эта функция получила именно в BSD. Отсутствие директивы интерпретатора, но поддержка скриптов оболочки, заметно в документации к версии 7 Unix 1979 года, где вместо этого описывается механизм оболочки Bourne: файлы с правами на выполнение обрабатывались бы оболочкой особым образом, которая (в зависимости от начальных символов скрипта, например ":" или "#") запускала бы подпроцесс для интерпретации и выполнения содержащихся в файле команд. В этой модели скрипты вели себя как обычные команды только при вызове из оболочки Bourne. Попытка непосредственного запуска такого файла через системный вызов exec операционной системы завершалась бы неудачей, что не позволяло скриптам единообразно функционировать как стандартные системные команды.
The shebang was introduced by Dennis Ritchie between Edition 7 and 8 at Bell Laboratories. It was also added to the BSD releases from Berkeley's Computer Science Research (present at 2.8BSD and activated by default by 4.2BSD). As AT&T Bell Laboratories Edition 8 Unix, and later editions, were not released to the public, the first widely known appearance of this feature was on BSD. The lack of an interpreter directive, but support for shell scripts, is apparent in the documentation from Version 7 Unix in 1979, which describes instead a facility of the Bourne shell where files with execute permission would be handled specially by the shell, which would (sometimes depending on initial characters in the script, such as ":" or "#") spawn a subshell which would interpret and run the commands contained in the file. In this model, scripts would only behave as other commands if called from within a Bourne shell. An attempt to directly execute such a file via the operating system's own exec system trap would fail, preventing scripts from behaving uniformly as normal system commands.