我发现有些人在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
有人可以澄清一下吗?
答案 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不会工作。