WikiSort.ru - Не сортированное

ПОИСК ПО САЙТУ | о проекте
Шебанг — последовательность символов

Шебанг  (англ. shebang, sha-bang,[1][2][3] hashbang,[4][5] pound-bang,[2][6] or hash-pling[2][7]) — в программировании последовательность из двух символов: решётки и восклицательного знака ("#!") в начале файла скрипта.

Когда скрипт с шебангом выполняется как программа в Unix-подобных операционных системах, загрузчик программ рассматривает остаток строки после шебанга как имя файла программы-интерпретатора. Загрузчик запускает эту программу и передаёт ей в качестве параметра имя файла скрипта с шебангом.[8] Например, если полное имя файла скрипта "path/to/script" и первая строка этого файла:

#!/bin/sh

то загрузчик запускает на выполнение "/bin/sh" (обычно это Bourne shell или совместимый интерпретатор командной строки) и передаёт "path/to/script" как первый параметр.

Строка с шебангом обычно пропускается интерпретатором, так как символ "#" является символом начала комментариев во многих скриптовых языках. Некоторые интерпретаторы, которые не используют символ решётки для обозначения начала комментариев (такие, как Scheme), могут пропустить строку шебанга, определив её назначение.[9] Другие решения полагаются на препроцессор, который обрабатывает и удаляет строку шебанга перед тем, как остальная часть скрипта передаётся компилятору или интерпретатору. Так, например, работает InstantFPC, который позволяет запускать программы, написанные на Free Pascal, как скрипты на некоторых операционных системах.[10]

Синтаксис

Строка шебанга имеет следующий формат:[8]

#!interpreter [optional-arg]

interpreter должен быть абсолютным путём к исполняемому файлу программы (если интерпретатором является скрипт, он тоже должен начинаться с шебанга). Необязательный optionalarg должен иметь формат единственного аргумента (по причинам переносимости он не должен содержать пробелы). Пробел после #! является опционным.[2]

Примеры

Несколько типичных строк с шебангом:

  • #!/bin/sh — Выполнить файл с помощью sh (Bourne shell), или другой совместимой оболочки;
  • #!/bin/csh -f — Выполнить файл с помощью csh (C shell), или другой совместимой оболочки, с отключением выполнения .cshrc файла пользователя;
  • #!/usr/bin/perl -T — Выполнить файл при помощи Perl в режиме Taint checking;
  • #!/usr/bin/env python2 — Выполнить файл как программу на Python, используя переменную среды для получения пути к файлу интерпретатора.

Строки с шебангом могут содержать дополнительные аргументы, которые передаются интерпретатору (см. пример для Perl выше). Однако, так как обработка аргументов может отличаться, для переносимости лучше использовать только один аргумент без пробелов внутри. Дальнейшие указания по переносимости даны ниже.

Назначение

Указание интерпретатора в строке шебанга позволяет использовать файлы скриптов и данных как системные команды, скрывая детали реализации от пользователей и других программ, так как устраняется необходимость указывать файл интерпретатора в командной строке перед файлом скрипта.

Предположим, скрипт для Bourne shell находится в файле "some/path/to/foo", первая строка которого содержит:

#!/bin/sh -x

Если пользователь попытается выполнить этот файл скрипта при помощи командной строки (указывая "bar" и "baz" как аргументы):

some/path/to/foo bar baz

То результат будет таким же, как выполнение команды:

/bin/sh -x some/path/to/foo bar baz

Если путь "/bin/sh" является программой интерпретатора Bourne shell, то, в результате, "bar" и "baz" будут присвоены позиционным параметрам $1 и $2 интерпретатора, а все строки файла "some/path/to/foo" будут выполнены как команды этого интерпретатора. Также, поскольку символ решётки является символом начала комментария в языке Bourne shell (и во многих других интерпретаторах), строка шебанга будет пропущена.

Однако, только самим интерпретатором определяется итоговая обработка строки шебанга. Так, скрипт, содержащий следующие две строки, просто выведет обе строки в стандартный поток вывода:

#!/bin/cat
Hello world!

Преимущества

По сравнению с использованием глобального сопоставления расширения файла приложению интерпретатора, указание строки вызова интерпретатора в шебанге позволяет задать интерпретатор, неизвестный на глобальном уровне, и не требует прав администратора системы. Шебанг также позволяет задавать интерпретатор индивидуально для файла, не вводя сложной концепции пространства имён для сопоставления одного расширения нескольким интерпретаторам.

Переносимость

Шебанг должен задавать абсолютный путь (или путь относительно текущего рабочего каталога) для выполняемых файлов. Это может привести к проблемам для систем с нестандартной структурой файловой системы. Даже для систем с довольно стандартными каталогами, вполне возможно, что варианты одной и той же операционной системы хранят нужный интерпретатор в разных местах. Python, например, может быть в /usr/bin/python, /usr/local/bin/python, или, даже, в /home/username/bin/python, если он был установлен не администратором системы.

См. также

Примечания

  1. Advanced Bash Scripting Guide. Проверено 19 января 2012.
  2. 1 2 3 4 The #! magic, details about the shebang/hash-bang mechanism. Проверено 19 января 2012.
  3. Cooper, Mendel. Advanced Bash Scripting Guide 5.3 Volume 1. — lulu.com, November 5, 2010. — P. 5. ISBN 978-1-4357-5218-4.
  4. MacDonald, Matthew. HTML5: The Missing Manual. — Sebastopol, California : O'Reilly Media, 2011. — P. 373. ISBN 978-1-4493-0239-9.
  5. Lutz, Mark. Learning Python. — 4th. O'Reilly Media, September 2009. — P. 48. ISBN 978-0-596-15806-4.
  6. Lie Hetland, Magnus. Beginning Python: From Novice to Professional. — Apress, October 4, 2005. — P. 21. ISBN 978-1-59059-519-0.
  7. Schitka, John. Linux+ Guide to Linux Certification. — Course Technology, December 24, 2002. — P. 353. ISBN 978-0-619-13004-6.
  8. 1 2 execve(2) - Linux man page. Проверено 21 октября 2010.
  9. SRFI 22
  10. InstantFPC documentation

Ссылки

Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".

Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.

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




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.ru внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2024
WikiSort.ru - проект по пересортировке и дополнению контента Википедии