Во-первых, каждый раз, когда вы запускаете скрипт, используя интерпретатор явно, как в
$ python ./my_script.py
$ ksh ~/bin/redouble.sh
$ lua5.1 /usr/local/bin/osbf3
строка #!
всегда игнорируется. Строка #!
является функцией Unix только для исполняемых сценариев , и вы можете увидеть ее полностью документированную на странице руководства для execve(2)
. Там вы найдете, что слово, следующее за #!
, должно быть путем к действительному исполняемому файлу. Так
#!/usr/bin/env python
выполняет все, что python
для пользователей $PATH
. Эта форма устойчива к перемещению интерпретатора Python, что делает ее несколько более переносимой, но это также означает, что пользователь может переопределить стандартный интерпретатор Python, поставив перед ним что-то в $PATH
. В зависимости от ваших целей, это поведение может быть или не быть в порядке.
Далее
#!/usr/bin/python
относится к общему случаю, когда в /usr/bin
установлен интерпретатор Python. Если он установлен где-то еще, вы проигрываете. Но это хороший способ убедиться, что вы получаете именно ту версию, которую хотите, или вообще ничего (поведение при сбое), как в
#!/usr/bin/python2.5
Наконец,
#!python
работает только при наличии исполняемого файла python
в текущем каталоге при запуске скрипта. Не рекомендуется.