跳转到内容
核心概念shell-scripting

脚本解释器行 Shebang

理解脚本首行如何选择解释器,以及直接执行、PATH 查找和可执行权限之间的关系。

状态
已审阅
难度
入门
平台
linux · raspberry-pi-os

Linux 把以 #! 开头的可执行文本文件视为解释器脚本(interpreter script)。首行指定运行脚本的解释器:

#!/usr/bin/env bash

这里 /usr/bin/env 是内核启动的程序,bashenv 按当前 PATH 查找。

Terminal window
chmod u+x script.sh
./script.sh

直接运行 ./script.sh 时,需要:

  • 文件具有执行权限;
  • 首行解释器存在;
  • 脚本内容符合该解释器语法。

运行 bash script.sh 时,是显式启动 Bash 读取文件,不依赖脚本自身的 shebang 和执行位。

  • #!/usr/bin/env bash:适合 Bash 不固定安装在 /bin/bash 的环境,但结果依赖 PATH
  • #!/bin/sh:只适用于符合目标系统 /bin/sh 语法的脚本,不能默认使用 Bash 专有语法。
  • 精简 BusyBox 或 Buildroot 系统可能没有 Bash,发布脚本前应先运行 command -v bash

安全敏感或特权环境不应依赖未经控制的 PATH 查找解释器。