这条线在许多文件的顶部是什么?
我见过很多文件都将这一行作为第一行。 究竟是什么?
#!/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。
解释器指令放在字符#!
后面的可执行脚本的第一行#!
(称为shebang或hashbang ),以便脚本只能通过以下一种方式从命令行执行脚本名称:
$ 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就不会知道它是一个脚本并将其视为文本文件。