Что это за строка в верхней части многих файлов?
Я видел много файлов с этой строкой в первой строке. Что именно это?
#!/usr/bin/env python
Что это значит? Зачем это нужно?
3 ответа
Это не просто /usr/bin/env python
но #!/usr/bin/env python
и эта линия называется шебанг.
Я цитирую Википедию:
В Unix-подобных операционных системах, когда скрипт с shebang запускается как программа, загрузчик программы анализирует оставшуюся часть начальной строки скрипта как директиву интерпретатора; вместо этого запускается указанная программа-интерпретатор, передавая ей в качестве аргумента путь, который изначально использовался при попытке запустить скрипт.[8] Например, если сценарий назван с путем "путь / к / сценарию", и он начинается со следующей строки:
#!/bin/sh
затем загрузчик программы получает указание запустить программу "/bin/sh" (обычно это оболочка Bourne или совместимая оболочка), передав "path/to/script" в качестве первого аргумента.
Строка shebang обычно игнорируется интерпретатором, потому что символ "#" является маркером комментария во многих языках сценариев; некоторые интерпретаторы языка, которые не используют хеш-знак для начала комментариев (например, Схема), могут игнорировать строку Шебанга в знак признания ее цели.
В моем случае (13.10 Desktop), /usr/bin/env python
по умолчанию будет python2.7, но это может быть python3.4 в зависимости от настроек вашей системы (например, 14.04 Server).
$ /usr/bin/env python
Python 2.7.5+ (default, Feb 27 2014, 19:37:08)
[GCC 4.8.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
Такая строка может появиться в первой строке интерпретируемых программ или сценариев. Загрузчик программы должен передать файл интерпретатору - в данном случае Python.
Директивы интерпретатора помещаются в первую строку исполняемого скрипта после символов #!
(называемый shebang или hashbang), чтобы скрипт мог быть выполнен только по имени скрипта одним из следующих способов из командной строки:
$ script
$ ./script
$ path/to/script
Чтобы иметь возможность выполнять скрипт таким образом, как команда, он должен иметь разрешение на выполнение.
вместо интерпретатора с именем скрипта в качестве аргумента, который потребовался бы, если бы там не было директивы интерпретатора, например:
$ python path/to/script
#!
называется шебанг Обычно Баш считает символ #
в качестве комментария, однако, увидев #!
Bash знает, что остальная часть содержимого должна быть скриптом, и первая строка будет указывать, какую программу или интерпретатор вызывать. В случае #!/usr/bin/env python
Bash знает, что эта строка вызывает правильные "настройки среды" для интерпретатора Python. Таким образом, остальная часть содержимого файла будет выполняться с использованием интерпретатора Python. Если бы линия была похожа #!/bin/bash
или же #!/usr/bin/perl
Bash запустил бы контент, используя Bash (сам) или Perl соответственно.
Вы все еще можете написать скрипт на Python, Bash или Perl, не упоминая эту строку. В этом случае для запуска скрипта Python вам нужно вызвать из командной строки этот путь:
/usr/bin/python MyScript.py
Это потому что без Шебанга #!
и без правильного пути интерпретатора Bash не узнает, что это скрипт, и будет рассматривать его как текстовый файл.