前言
有时候我们会在各种语言的第一行看见如下标志,你可能并不知道这是什么,但还是按照网上的教程写进了自己的程序代码中。
#!/usr/bin/python3
print("Hello, World!")
# 来自「菜鸟教程」 -> https://www.runoob.com/python3/python3-tutorial.html
其实这个第一行就叫做「shebang 行」,又称释伴行1(即 解释伴随行
的简称),是一种广泛存在于各类脚本中,用于告诉系统用哪一个解释器来解释脚本。「shebang 行」在解释型语言脚本中更为常见。
定义
shebang
在 Shell 脚本中,shebang
(也称为 hashbang
)是指脚本文件的第一行,用于指定解释器路径2。「shebang」通常作为类 unix 系统中脚本的第一行的前两个字符,「shebang」的后面接的是用于解释执行脚本的解释器程序路径,像 Python / Shell(Bash or Zsh) / Perl
等等一些常见的解释器。
#!/path/to/interpreter
... 一些指令
#
is often called ==sharp== and!
is called ==Bang==, hence the name sharp bang, but generally people say it shebang instead of ==sharpbang==. 3
需要注意的是,「shebang」只能出现在脚本中的第一行,「shebang」如果出现在脚本语句的中间位置,会被认为是注释,导致脚本无法执行,所以「shebang 行」只能出现在脚本第一行。然后下面写对应语言的脚本。
shebang 行
由此可见,「shebang」所存在的这一行就叫做「shebang 行」。
特性
「shebang」的好处在于,允许脚本和数据文件充当系统命令,无需在调用的时候由用户指定解释器,从而对用户或者其他程序==隐藏了其执行的细节==。
#!/bin/sh
使用 sh,即 Bourne shell 或其他 shell 来执行脚本。1- 如果#! 指定的解释程序不存在,那么会报错“bad interpreter: No such file or directory”。注意:#! 之后的解释程序,需要写其绝对路径 (如:#!/bin/bash),它是不会自动到 $PATH 中寻找解释器的。4
- 如果脚本文件中没有 #! 这一行,那么它执行时会默认用当前 Shell 去解释这个脚本 (即:$SHELL 环境变量)。4
- 在 Windows 系统中,# 开头的行就被当成注释忽略了,不会存在兼容性的问题。4
- 除了指定解释器,「shebang」还可以用于传递参数给解释器。
- 通过使用「shebang」,开发者可以确保脚本文件在任何环境中都能正确地执行。
结语
使用「shebang」在开发大型项目时可以提供统一的开发环境、便于脚本管理、支持多语言和工具的灵活性,并支持自动化部署和集成等方面的用途。虽然只有短短一行,「shebang」在开发团队协作时有助于降低使用成本,方便脚本分享和迁移。它永远是开发团队协作中一个简单但非常实用的小技巧!