#!/usr/bin/python3 shebang的目的是什么
我注意到在一些脚本语言中都有这个情况,这里我用的是Python。在很多教程里,第一行通常会写上 #!/usr/bin/python3
。我不太明白为什么要这样做。
- 操作系统难道不应该知道这是一个Python脚本吗?(显然Python已经安装了,因为你在引用它)
- 如果用户使用的操作系统不是基于Unix的呢?
- 语言可能安装在其他文件夹里,出于某种原因。
- 用户可能有不同的版本,尤其是当版本号不是完整的(比如Python3和Python32)时。
我觉得这些原因可能会导致Python脚本出错。
7 个回答
这一行的作用是帮助找到可以运行脚本的程序。这个以“#!”开头的写法在大多数脚本语言中都是比较标准的,尤其是在一些比较成熟的操作系统上。
这一行的一个重要部分是指定要使用的解释器。比如在许多以开发为中心的Linux系统中,通常会同时安装多个版本的Python。
Python 2.x和Python 3之间并不是完全兼容的,所以这个区别可能非常重要。因此,#! /usr/bin/python
和#! /usr/bin/python3
是不同的(而且#! /usr/bin/env python3
也和这两者不完全相同,具体可以参考页面上的其他说明)。
这被称为哈希邦(hash-bang)。如果你从命令行运行这个脚本,它会查看第一行来判断应该用哪个程序来解释这个脚本。
在非Unix系统上,它会根据自己的规则来决定怎么运行这个脚本。比如在Windows上,它会根据文件名的后缀来判断,而#
符号会让第一行被当作注释处理。
如果Python可执行文件的路径不对,脚本自然就会出错。不过,从任何标准位置创建指向实际可执行文件的链接是很简单的。
#!/usr/bin/python3
是一个叫做 shebang 行 的东西。
shebang 行的作用是告诉系统解释器在哪里。在这个例子中,python3
的解释器在 /usr/bin/python3
这个位置。shebang 行也可以用来指其他脚本语言的解释器,比如 bash
、ruby
、perl
等,例如:#!/bin/bash
。
如果没有 shebang 行,操作系统就不知道这个文件是一个 Python 脚本,即使你已经给这个脚本设置了可执行权限(用 chmod +x script.py
),并且用 ./script.py
来运行它。要让这个脚本默认用 python3 来运行,你可以直接用 python3 script.py
来调用它,或者设置 shebang 行。
你还可以使用 #!/usr/bin/env python3
来提高脚本的兼容性,这样在不同的系统上,如果它们的解释器安装在不同的位置,也能正常工作。