这条线在许多文件的顶部是什么?

我见过很多文件都将这一行作为第一行。 究竟是什么?

#!/usr/bin/env python 

这是什么意思? 为什么有必要?

这不仅仅是/usr/bin/env python而是#!/usr/bin/env python ,这一行被称为shebang 。

我在引用维基百科:

在类Unix操作系统下,当一个带有shebang的脚本作为程序运行时,程序加载器会将脚本初始行的其余部分解析为解释器指令; 而是运行指定的解释器程序,将其作为参数传递给尝试运行脚本时最初使用的路径。[8] 例如,如果脚本以路径“path / to / script”命名,并且它以以下行开头:

 #!/bin/sh 

然后指示程序加载程序运行程序“/ bin / sh”(通常这是Bourne shell或兼容的shell),将“path / to / script”作为第一个参数传递。

shebang行通常被解释器忽略,因为“#”字符是许多脚本语言中的注释标记; 一些不使用哈希标记开始评论的语言解释器(例如Scheme)仍然可能会忽略shebang线以识别其目的。

在我的情况下(13.10桌面), /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。

解释器指令放在字符#!后面的可执行脚本的第一行#! (称为shebanghashbang ),以便脚本只能通过以下一种方式从命令行执行脚本名称:

 $ script $ ./script $ path/to/script 

为了能够像命令一样以这种方式执行脚本,它必须具有执行权限。

而不是带有脚本名称的解释器作为参数,如果解释器指令不在那里将是必需的,如下所示:

 $ python path/to/script 

#! 被称为shebang。 通常,Bash将符号#视为注释,但是在看到#! 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 

这是因为没有shebang #! 如果没有正确的解释器路径,Bash就不会知道它是一个脚本并将其视为文本文件。