Я заметил это на нескольких языках сценариев, но в этом примере я использую python. Во многих уроках они начинаются с #!/usr/bin/python3
первой строки. Я не понимаю, почему у нас это есть.
- Если операционная система не знает, что это скрипт на python (очевидно, он установлен, так как вы делаете на него ссылку)
- Что делать, если пользователь использует операционную систему, не основанную на Unix
- Язык устанавливается в другую папку по любой причине
- У пользователя другая версия. Особенно, когда это не полный номер версии (как Python3 против Python32)
Во всяком случае, я мог видеть, что это сломало скрипт на python по перечисленным выше причинам.
Ответы:
#!/usr/bin/python3
это линия Шебанга .Линия Шебанга определяет, где находится переводчик. В этом случае
python3
переводчик находится в/usr/bin/python3
. Линия A притон также может бытьbash
,ruby
,perl
переводчик или каких - либо других языков сценариев, например:#!/bin/bash
.Без строки shebang операционная система не знает, что это скрипт на python, даже если вы установите флаг выполнения для скрипта и запустите его как
./script.py
. Чтобы скрипт по умолчанию выполнялся в python3, либо вызовите его,python3 script.py
либо установите строку shebang.Вы можете использовать
#!/usr/bin/env python3
для переносимости между различными системами, если у них установлен переводчик языка в разных местах.источник
#! /usr/bin/env python3
стоит ли выбирать#! /usr/bin/python3
?Это называется хэш-бэнг. Если вы запустите скрипт из оболочки, он проверит первую строку, чтобы выяснить, какая программа должна быть запущена для интерпретации скрипта.
ОС, не основанная на Unix, будет использовать свои собственные правила для выяснения того, как запустить скрипт. Например, Windows будет использовать расширение имени файла, и
#
первая строка будет рассматриваться как комментарий.Если путь к исполняемому файлу Python неправильный, то, естественно, скрипт завершится ошибкой. Легко создавать ссылки на фактический исполняемый файл из любого места, указанного стандартным соглашением.
источник
Эта строка помогает найти исполняемый файл программы, который будет запускать скрипт. Эта нотация Шебанга является довольно стандартной для большинства языков сценариев (по крайней мере, используемых во взрослых операционных системах).
Важным аспектом этой строки является указание, какой интерпретатор будет использоваться. Например, во многих дистрибутивах, ориентированных на разработку, нормально устанавливать несколько версий python одновременно.
Python 2.x и Python 3 не совместимы на 100%, поэтому это различие может быть очень важным. Так что
#! /usr/bin/python
и#! /usr/bin/python3
не совпадают (и ни один не совсем такой,#! /usr/bin/env python3
как отмечено в другом месте на этой странице.источник
И эта линия как .
Это игнорируется.
Он не будет работать, и его следует изменить, чтобы он указывал на правильное местоположение. Или
env
следует использовать.Он не будет работать и, вероятно, не сможет работать под другой версией.
источник
Чтобы уточнить, как работает строка shebang для окон, из документа 3.7 Python :
источник
На самом деле определение того, какой тип файла является файлом, очень сложно, поэтому теперь операционная система не может просто знать. Это может сделать много догадок на основе -
Но командная строка не беспокоится обо всем этом, потому что она работает на ограниченном обратно совместимом слое, с тех пор, как эта причудливая ерунда ничего не значила. Если вы дважды щелкните по нему точно, современная ОС сможет это понять, но если вы запустите его из терминала, то нет, потому что терминал не заботится о ваших модных API-интерфейсах для ввода файлов, специфичных для вашей ОС.
Что касается других пунктов. Это удобно, так же возможно запустить
python3 path/to/your/script
Если ваш питон не указан по указанному пути, он не будет работать, но мы склонны устанавливать такие вещи, чтобы эта работа работала, а не наоборот. На самом деле это не имеет значения, если вы находитесь под * nix, ваша оболочка должна учитывать эту строку, потому что это
shellcode
. Так, например, вы можете запуститьbash
под Windows.Вы можете фактически пропустить эту строку полностью, это просто означает, что вызывающая сторона должна будет указать интерпретатора. Также не размещайте своих переводчиков в нестандартных местах, а затем пытайтесь вызывать сценарии без предоставления переводчика.
источник