shebang必须严格写在第一行最开头,格式为#!/path/to/interpreter,不可省略#!、不可换行或加空格;推荐用#!/usr/bin/env bash以增强跨平台兼容性。

脚本开头必须写 #!/path/to/interpreter,这是唯一能让系统识别并调用指定解释器的方式,不能省略 #!,也不能换行或加空格。
必须写在第一行且格式严格
shebang(也叫 hashbang)只能出现在脚本的**第一行最开头**,前面不能有任何字符(包括空格、BOM、注释),后面紧接解释器的绝对路径:
-
正确:
#!/bin/bash、#!/usr/bin/env python3 -
错误:
/bin/bash(缺#!)、# /bin/bash(中间有空格)、# /bin/bash(只有#,被当普通注释)、#! /bin/bash(#!和路径间有空格)
选哪个路径更稳妥?
常见两种写法,适用场景不同:
-
#!/bin/bash:适合明确知道 bash 安装在/bin/bash的系统(多数 Linux 发行版默认如此) -
#!/usr/bin/env bash:更通用,利用env在$PATH中查找 bash,能适配 macOS、某些容器或自定义环境(比如 bash 装在/usr/local/bin/bash)
注意:/usr/bin/env 本身路径在绝大多数 POSIX 系统中是稳定的,所以这种写法实际更可靠。
别忘了配套操作
光写对 shebang 不够,还得确保脚本能真正跑起来:
- 给脚本加可执行权限:
chmod +x script.sh - 用路径方式运行:
./script.sh或/full/path/script.sh;直接script.sh不会触发 shebang(除非该路径已在$PATH中) - 避免 Windows 换行符(CRLF):用
dos2unix script.sh或编辑器设为 Unix 格式,否则#!行末的\r会导致解释器路径识别失败
常见误区提醒
这些做法看似合理,但实际无效或危险:
- 把作者、时间、说明写在第一行——会覆盖 shebang,脚本变成普通文本,无法直接执行
- 用相对路径如
#!/bin/sh写成#!bin/sh(漏了开头的/)——系统会尝试在当前目录找bin/sh,大概率失败 - 以为只要扩展名是
.sh就自动用 bash ——Linux 不看扩展名,全靠 shebang 或显式调用(如bash script.sh)











