Python Shebang行

Pan*_*rge 3 python shebang python-3.x

我见过有人在环境后用空格写他们的shebang行。例如。

#!/usr/bin/env python
Run Code Online (Sandbox Code Playgroud)

这是错字吗?

我从不使用空格。我用

#!/usr/bin/env/python
Run Code Online (Sandbox Code Playgroud)

有人可以澄清一下吗?

Pau*_*mas 5

不,这不是打字错误!您正在使用的那个不适用于所有操作系统。EG 在我的 Ubuntu Linux 实现中 'env' 是 /usr/bin 中的一个程序,而不是一个目录,所以 #!/usr/bin/env/python 将不起作用。


小智 5

不使用空格不是错字,但是在不同计算机上执行相同文件时会导致可移植性问题。shebang行(#!/usr....)的目的是指示在执行文件中的代码时将使用哪种解释器。根据维基百科

shebang解释器指令的形式如下:

#!interpreter [optional-arg]

其中解释器是可执行程序的绝对路径。可选参数是表示单个参数的字符串。

您提供的示例#!/usr/bin/env python实际上向Shell指示了执行文件时要使用的解释器是用户路径中存在的第一个python解释器。shebang行是用这种方式编写的,以确保可移植性

Shebangs必须为系统可执行文件指定绝对路径(或相对于当前工作目录的路径)。这会在具有非标准文件系统布局的系统上引起问题。即使系统具有相当标准的路径,同一操作系统的变体也很可能为所需的解释程序提供不同的位置。例如,Python可能位于/ usr / bin / python,/ usr / local / bin / python中,如果是普通用户安装的话,甚至可能位于/ home / username / bin / python之类的位置。

因此,有时需要在将脚本从一台计算机复制到另一台计算机后编辑shebang行,因为编码到脚本中的路径可能不适用于新计算机,这取决于解释器过去放置方式的一致性。 。由于这个原因,并且因为POSIX没有标准化路径名,所以POSIX也没有标准化功能。

通常,可以通过引入间接级别来使用程序/ usr / bin / env来规避此限制。#!后面是/ usr / bin / env,然后是没有完整路径的所需命令,如本例所示:

#!/usr/bin/env sh