Python shebang line

时间:2018-05-26 20:50:55

标签: python python-3.x shebang

我发现有些人在env之后用空格写了他们的shebang线。 例如。

var oldXHR = window.XMLHttpRequest;

function newXHR() {
    var realXHR = new oldXHR();
    realXHR.addEventListener("readystatechange", function() {
        if(realXHR.readyState==4 && realXHR.status==200){
            console.log('request was made');
        }
    }, false);
    return realXHR;
 }
 window.XMLHttpRequest = newXHR;

这是一个错字吗?

我没有使用空间。我用

#!/usr/bin/env python

有人可以澄清一下吗?

2 个答案:

答案 0 :(得分:5)

不使用空格不是拼写错误,但在不同计算机上执行相同文件时会导致可移植性问题。 shebang行(#!/usr....)的目的是指示在文件中执行代码时要使用的解释器。根据{{​​3}}:

  

shebang翻译指令的形式如下:

     

#!interpreter [optional-arg]

     

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

您提供的示例#!/usr/bin/env python实际上向shell指示在执行文件时要使用的解释器是用户路径中存在的第一个python解释器。 shebang行以这种方式写入Wikipedia

  

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

答案 1 :(得分:2)

不,这不是一个错字!你正在使用的那个不适用于所有的操作系​​统。例如。在我的Ubuntu Linux实现中' env'是/ usr / bin中的程序而不是目录,所以#!/ usr / bin / env / python不会工作。