Что это за строка в верхней части многих файлов?

Я видел много файлов с этой строкой в ​​первой строке. Что именно это?

#!/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 не узнает, что это скрипт, и будет рассматривать его как текстовый файл.

Другие вопросы по тегам