我在一些脚本语言中注意到了这一点,但是在这个例子中,我使用的是python。在许多教程中,他们会以#!/usr/bin/python3。我不明白我们为什么要这么做。

操作系统不应该知道它是一个python脚本吗(显然它已经安装了,因为你引用了它) 如果用户使用的操作系统不是基于unix的呢 由于某种原因,该语言被安装在不同的文件夹中 用户版本不一致。特别是当它不是完整的版本号时(比如Python3 vs Python32)

如果有的话,我可以看到这破坏了python脚本,因为上面列出的原因。


当前回答

这条线表示如何。 它被忽略了。 它将无法运行,应该将其更改为指向正确的位置。或者应该使用env。 它将无法运行,并且可能无法在不同的版本下运行。

其他回答

为了阐明shebang行如何在windows中工作,请参阅3.7 Python文档:

If the first line of a script file starts with #!, it is known as a “shebang” line. Linux and other Unix like operating systems have native support for such lines and they are commonly used on such systems to indicate how a script should be executed. The Python Launcher for Windows allows the same facilities to be used with Python scripts on Windows To allow shebang lines in Python scripts to be portable between Unix and Windows, the launcher supports a number of ‘virtual’ commands to specify which interpreter to use. The supported virtual commands are: /usr/bin/env python The /usr/bin/env form of shebang line has one further special property. Before looking for installed Python interpreters, this form will search the executable PATH for a Python executable. This corresponds to the behaviour of the Unix env program, which performs a PATH search. /usr/bin/python /usr/local/bin/python python

这条线表示如何。 它被忽略了。 它将无法运行,应该将其更改为指向正确的位置。或者应该使用env。 它将无法运行,并且可能无法在不同的版本下运行。

实际上,决定一个文件是什么类型的文件是非常复杂的,所以现在操作系统不能只知道。它可以根据-进行很多猜测

扩展 泌尿道感染 MIME

但是命令行并没有为此烦恼,因为它运行在一个有限的向后兼容层上,从那时起,那些花哨的废话就没有任何意义了。如果你双击它,现代操作系统当然可以解决这个问题——但如果你从终端运行它,那么就不会,因为终端不会关心你花哨的操作系统特定的文件输入api。

关于其他几点。这很方便,运行起来也很方便

python3路径/ /你/脚本

如果你的python不在指定的路径中,那么它就不能工作,但我们倾向于安装一些东西来让这样的东西工作,而不是相反。是否使用*nix并不重要,它取决于shell是否考虑这一行,因为它是一个shellcode。例如,你可以在Windows下运行bash。

实际上你可以完全省略这一行,这只是意味着调用者必须指定一个解释器。此外,不要将解释器放在非标准位置,然后在不提供解释器的情况下尝试调用脚本。

这一行帮助找到运行脚本的可执行程序。这种shebang表示法在大多数脚本语言中都是相当标准的(至少在成熟的操作系统中使用)。

这一行的一个重要方面是指定将使用哪个解释器。例如,在许多以开发为中心的Linux发行版上,同时安装几个版本的python是很正常的。

Python 2。x和Python 3不是100%兼容的,所以这个差异是非常重要的。所以# !/usr/bin/python和#!/usr/bin/python3是不一样的(和#!/usr/bin/env python3,如本页其他地方所述。

这叫散列弹。如果从shell运行脚本,它将检查第一行,以确定应该启动哪个程序来解释脚本。

非基于Unix的操作系统将使用自己的规则来确定如何运行脚本。例如,Windows将使用文件名扩展名,而#将导致第一行被视为注释。

如果Python可执行文件的路径是错误的,那么脚本自然会失败。从标准约定指定的任何位置创建到实际可执行文件的链接都很容易。