我有一对夫妇的脚本语言的注意到了这一点,但在这个例子中,我使用python。在很多教程,他们将与在第一行#!/usr/bin/python3
启动。我不明白为什么我们有这个。
如果有的话,我可以看到这打破了,因为上面所列出的原因python脚本。
#!/usr/bin/python3
是shebang行。
甲shebang行定义了解释器所在的位置。在这种情况下,python3
解释位于/usr/bin/python3
。甲shebang行也可以是bash
,ruby
,perl
或任何其他脚本语言解释,例如:#!/bin/bash
。
如果没有家当线,操作系统不知道这是一个Python脚本,即使你设置执行标志上的脚本和喜欢./script.py
运行它。为了使默认在python3运行脚本,或者调用它作为python3 script.py
或设置家当线。
您可以使用#!/usr/bin/env python3
便携性在不同系统中的情况下,他们已经安装在不同地点的语言解释器。
这就是所谓的散列爆炸。如果从shell中运行脚本,它会检查第一线搞清楚什么程序应该开始解释脚本。
非基于Unix的操作系统将使用它自己的规则来确定如何运行脚本。 Windows为例子将使用的文件扩展名和#
将导致第一行作为注释处理。
如果路径到Python的可执行文件是错误的,那么自然,脚本将失败。这是很容易创建从无论是通过标准约定指定位置的实际可执行文件。
此行有助于找到将要运行脚本程序的可执行文件。这家当符号是在大多数的脚本语言(至少在成年操作系统使用的)相当标准。
这条线的一个重要方面是指定哪个解释将被使用。在许多发展为核心的Linux发行版,例如,它是正常的安装,同时蟒蛇的几个版本。
的Python 2.x和Python 3的不是100%兼容,因此这种差异是非常重要的。所以#! /usr/bin/python
和#! /usr/bin/python3
是不一样的(也不是很为这个页面上的其他地方提到的一样#! /usr/bin/env python3
。
env
应该被使用。为了澄清家当线如何工作的窗口,从3.7 Python doc:
其实什么类型的文件确定一个文件是很复杂的,所以现在的操作系统不能只知道。它可以使很多基于猜测的 -
但命令行不与所有的麻烦,因为它运行有限的向后兼容层,从那个时候看中废话不意味着什么。如果您双击它肯定的是,现代操作系统可以身影,OUT-但如果你在终端上运行它,然后没有,因为终端不关心你的想象OS特定文件输入的API。
至于其他问题。这是一个方便的,这是同样可以运行
python3 path/to/your/script
如果你的Python是不是在指定的路径,那么它不会工作,但我们往往安装的东西做出这样的东西的工作,而不是周围的其他方式。实际上它并不重要,如果你是下* nix中,它给你的shell是否考虑这条线,因为它是一个shellcode
。因此,例如,你可以在Windows下运行bash
。
实际上,你可以ommit这一行完全,它只是意味着调用者必须指定一名翻译。另外,不要把你的翻译在非标准的位置上,然后尝试调用脚本,而无需提供一个解释。