#!/usr/bin/python3 shebang的目的是什么

251 投票
7 回答
347807 浏览
提问于 2025-04-17 03:46

我注意到在一些脚本语言中都有这个情况,这里我用的是Python。在很多教程里,第一行通常会写上 #!/usr/bin/python3。我不太明白为什么要这样做。

  • 操作系统难道不应该知道这是一个Python脚本吗?(显然Python已经安装了,因为你在引用它)
  • 如果用户使用的操作系统不是基于Unix的呢?
  • 语言可能安装在其他文件夹里,出于某种原因。
  • 用户可能有不同的版本,尤其是当版本号不是完整的(比如Python3和Python32)时。

我觉得这些原因可能会导致Python脚本出错。

7 个回答

14

这一行的作用是帮助找到可以运行脚本的程序。这个以“#!”开头的写法在大多数脚本语言中都是比较标准的,尤其是在一些比较成熟的操作系统上。

这一行的一个重要部分是指定要使用的解释器。比如在许多以开发为中心的Linux系统中,通常会同时安装多个版本的Python。

Python 2.x和Python 3之间并不是完全兼容的,所以这个区别可能非常重要。因此,#! /usr/bin/python#! /usr/bin/python3是不同的(而且#! /usr/bin/env python3也和这两者不完全相同,具体可以参考页面上的其他说明)。

30

这被称为哈希邦(hash-bang)。如果你从命令行运行这个脚本,它会查看第一行来判断应该用哪个程序来解释这个脚本。

在非Unix系统上,它会根据自己的规则来决定怎么运行这个脚本。比如在Windows上,它会根据文件名的后缀来判断,而#符号会让第一行被当作注释处理。

如果Python可执行文件的路径不对,脚本自然就会出错。不过,从任何标准位置创建指向实际可执行文件的链接是很简单的。

401

#!/usr/bin/python3 是一个叫做 shebang 行 的东西。

shebang 行的作用是告诉系统解释器在哪里。在这个例子中,python3 的解释器在 /usr/bin/python3 这个位置。shebang 行也可以用来指其他脚本语言的解释器,比如 bashrubyperl 等,例如:#!/bin/bash

如果没有 shebang 行,操作系统就不知道这个文件是一个 Python 脚本,即使你已经给这个脚本设置了可执行权限(用 chmod +x script.py),并且用 ./script.py 来运行它。要让这个脚本默认用 python3 来运行,你可以直接用 python3 script.py 来调用它,或者设置 shebang 行。

你还可以使用 #!/usr/bin/env python3 来提高脚本的兼容性,这样在不同的系统上,如果它们的解释器安装在不同的位置,也能正常工作。

撰写回答