没给脚本加x权限时,可用bash script.sh等方式绕过权限检查,因解释器仅需读权限;此时shebang失效,执行逻辑由显式指定的解释器决定,适用于调试或只读环境。

没给脚本加 x 权限时,确实不能用 ./script.sh 运行,但你可以绕过权限检查,直接让解释器读取并执行文件内容——这不依赖文件本身的可执行位,只依赖你有读权限。
用解释器显式调用(最常用)
只要脚本能被读取,就可以把脚本当作“输入”交给 bash、sh 或 python 等解释器处理。系统不会校验脚本文件有没有 x 权限,只检查解释器本身是否可执行。
-
bash script.sh—— 调用当前 PATH 中的 bash,支持大多数 bash 特性(如数组、[[ ]]) -
sh script.sh—— 更轻量,兼容 POSIX shell,适合简单脚本;但不支持 bash 扩展语法 -
/bin/bash script.sh—— 显式指定解释器路径,避免因 PATH 混乱导致调用错误版本 -
python3 myscript.py或/usr/bin/env python3 myscript.py—— 对 Python 脚本同理,无需chmod +x
注意 shebang 行此时不生效
当你用 bash script.sh 这种方式运行时,首行的 #!/bin/bash 会被忽略。真正起作用的是你手动指定的解释器。所以:
- 如果脚本写的是
#!/usr/bin/python3,但你用bash script.sh调用,会报语法错误 - 想让 shebang 生效,必须用
./script.sh(前提是已chmod +x)
适用场景和限制
这种方式适合调试、临时执行或无法修改权限的环境(比如只读挂载、他人文件、容器内受限目录)。
- ✅ 不需要改文件权限,也不需要 sudo
- ✅ 可快速验证脚本逻辑是否正确
- ❌ 不会继承脚本中通过
#!/usr/bin/env xxx声明的环境变量或路径查找逻辑 - ❌ 若脚本依赖相对路径(如
./helper.sh),在非脚本所在目录调用时可能出错
补充:为什么能绕过 x 权限?
Linux 内核对 ./xxx 这类直接执行施加了严格限制:必须满足可执行位 + 文件系统允许执行(非 noexec 挂载)。但解释器本身是普通可执行程序,它读取脚本只是“打开并解析文本”,属于读操作(r 权限),不受 x 位约束。

















