Для установки нажмите кнопочку Установить расширение. И это всё.

Исходный код расширения WIKI 2 регулярно проверяется специалистами Mozilla Foundation, Google и Apple. Вы также можете это сделать в любой момент.

4,5
Келли Слэйтон
Мои поздравления с отличным проектом... что за великолепная идея!
Александр Григорьевский
Я использую WIKI 2 каждый день
и почти забыл как выглядит оригинальная Википедия.
Статистика
На русском, статей
Улучшено за 24 ч.
Добавлено за 24 ч.
Что мы делаем. Каждая страница проходит через несколько сотен совершенствующих техник. Совершенно та же Википедия. Только лучше.
.
Лео
Ньютон
Яркие
Мягкие

Из Википедии — свободной энциклопедии

Шебанг — последовательность символов

Шебанг  (англ. 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 должен быть абсолютным путём к исполняемому[1] файлу программы (если интерпретатором является скрипт, он тоже должен начинаться с шебанга). Необязательный optional‑arg должен иметь формат единственного аргумента (по причинам переносимости он не должен содержать пробелы). Пробел после #! является опциональным.[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, используя env для получения пути к файлу интерпретатора.

Строки с шебангом могут содержать дополнительные аргументы, которые передаются интерпретатору (см. пример для 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, если он был установлен не администратором системы.

Поэтому для лучшей переносимости используют /usr/bin/env, обладающий возможностью поиска программы в PATH, например:

#!/usr/bin/env python

В данном случае, где бы ни находился интерпретатор Python, он будет запущен.

См. также

Примечания

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

Ссылки

Эта страница в последний раз была отредактирована 2 января 2024 в 16:36.
Как только страница обновилась в Википедии она обновляется в Вики 2.
Обычно почти сразу, изредка в течении часа.
Основа этой страницы находится в Википедии. Текст доступен по лицензии CC BY-SA 3.0 Unported License. Нетекстовые медиаданные доступны под собственными лицензиями. Wikipedia® — зарегистрированный товарный знак организации Wikimedia Foundation, Inc. WIKI 2 является независимой компанией и не аффилирована с Фондом Викимедиа (Wikimedia Foundation).