我在一些脚本语言中注意到了这一点,但是在这个例子中,我使用的是python。在许多教程中,他们会以#!/usr/bin/python3。我不明白我们为什么要这么做。
操作系统不应该知道它是一个python脚本吗(显然它已经安装了,因为你引用了它)
如果用户使用的操作系统不是基于unix的呢
由于某种原因,该语言被安装在不同的文件夹中
用户版本不一致。特别是当它不是完整的版本号时(比如Python3 vs Python32)
如果有的话,我可以看到这破坏了python脚本,因为上面列出的原因。
#!/usr/bin/python3是shebang行。
shebang行定义解释器的位置。在本例中,python3解释器位于/usr/bin/python3shebang行也可以是bash、ruby、perl或任何其他脚本语言的解释器,例如:#!/bin/bash。
如果没有shebang行,操作系统不会知道它是一个python脚本,即使你在脚本上设置了执行标志(chmod +x script.py)并像./script.py那样运行它。要使脚本在python3中默认运行,可以将其作为python3 script.py调用,或者设置shebang行。
你可以使用#!/usr/bin/env python3用于不同系统之间的可移植性,以防语言解释器安装在不同的位置。
实际上,决定一个文件是什么类型的文件是非常复杂的,所以现在操作系统不能只知道。它可以根据-进行很多猜测
扩展
泌尿道感染
MIME
但是命令行并没有为此烦恼,因为它运行在一个有限的向后兼容层上,从那时起,那些花哨的废话就没有任何意义了。如果你双击它,现代操作系统当然可以解决这个问题——但如果你从终端运行它,那么就不会,因为终端不会关心你花哨的操作系统特定的文件输入api。
关于其他几点。这很方便,运行起来也很方便
python3路径/ /你/脚本
如果你的python不在指定的路径中,那么它就不能工作,但我们倾向于安装一些东西来让这样的东西工作,而不是相反。是否使用*nix并不重要,它取决于shell是否考虑这一行,因为它是一个shellcode。例如,你可以在Windows下运行bash。
实际上你可以完全省略这一行,这只是意味着调用者必须指定一个解释器。此外,不要将解释器放在非标准位置,然后在不提供解释器的情况下尝试调用脚本。