Вопрос № 1) Линия называется Шебанг, и нет правильной формы, которая работает универсально. например,
#!python
#!/usr/bin/python
#!/usr/local/bin/python
#!/usr/bin/python -t
являются действительными / приемлемыми формами, но могут работать не во всех системах:
#!python
будет работать, только если исполняемый файл python находится где-нибудь в PATH вашей оболочки
#!/usr/bin/python
работает только в том случае, если двоичный файл python фактически находится в / usr / bin
#!/usr/local/bin/python
также работает, только если python находится в / usr / local / bin
Вопрос № 2)
#!/usr/bin/python -tt
передает параметр -tt
в python, как если бы вы сделали:
$ python -t somescript.py
в приглашении оболочки. Вы можете передавать произвольные аргументы командной строки интерпретатору в строке shebang.
Вопрос № 3)
Строка интерпретируется ядром ОС и оболочкой, которую вы используете в данный момент. Материал после #!
просто сообщает ОС, какую программу нужно запустить, чтобы «выполнить» оставшуюся часть сценария.
Вопрос № 4)
Синтаксис сценария зависит от языка, который вы используете. Например. скрипт оболочки PHP должен иметь вид
#!/usr/bin/php
<?php
... php code here ...
A #!/usr/bin/perl
Perl-скрипт должен использовать синтаксис Perl и т. Д. Если вы поместите PHP-код с Perl-шебангом, у вас просто будет Perl, запустивший скрипт с ошибками синтаксиса, так как PHP-код НЕ код perl
Вопрос № 5)
Shebangs предназначены для систем Unix, где расширения файлов никогда не использовались для идентификации типов файлов в ОС. Файл .c
понимался как файл исходного кода на языке Си, но это всего лишь соглашение. Вы можете поместить скрипт оболочки Bash в файл .c
, сделать его исполняемым, а с помощью #!/bin/bash
shebang он будет выполняться как скрипт Bash.
Определение типов исполняемых файлов по расширению файла - это больше для Windows.
Вопрос № 6)
Это возвращает нас к вопросу № 1 - если shebang утверждает, что интерпретатор находится на каком-то ДРУГОМ пути, чем тот, где он находится, этот конкретный сценарий не может быть выполнен до тех пор, пока shebang не будет исправлен, или интерпретатор не будет перемещен. Шебанги очень удобны, но не безошибочны.
К счастью, в наши дни большинство переводчиков устанавливаются в довольно стандартных местах, поэтому было бы несколько необычно найти, скажем, Perl, установленный на /some/wonky/weird/path
вместо /usr/bin