Problem entry · machine-readable · 编码代理与终端

bash: ./script.sh: Permission denied——脚本缺执行权限

本页嵌入 #trove-entity JSON(本条目全量结构化数据);全库数据见 /agent/trove.json。

元数据

idscript-permission-denied收录2026-08-29
问题域编码代理与终端主题分组权限与安全
适用工具bash · 外部工具

症状

```

$ ./setup.sh

bash: ./setup.sh: Permission denied

```

- `ls -l` 显示脚本权限是 `-rw-r--r--`(没有 x)。

- 明明文件内容没问题、`bash setup.sh` 能跑,`./setup.sh` 却报 Permission denied。

- 常见场景:从 Windows 拷贝/压缩包解压/新创建的文件,执行位丢失。

原因

1. Linux 用「执行位」决定能否直接运行文件;新文件默认 `644`(无执行位)。

2. `./script.sh` 走「直接执行」路径,需要 x 位;`bash script.sh` 是「把文件当参数读」,不需要 x 位。

3. 从 Windows 复制(FAT/exFAT/网络盘)或 zip 解压常丢执行位;git 仓库里 `core.fileMode` 配置不当也可能让 x 位丢失。

解法

1. **补执行位**:

```

chmod +x setup.sh

./setup.sh

```

2. **不想改权限**:显式用解释器 `bash setup.sh` / `python3 app.py`(对单次运行足够)。

3. **批量**:`chmod +x 站内文档。

4. 预防:git 提交前确认 `git ls-files -s` 里是 `100755`(可执行);解压 zip 用 `unzip` 后按需补 x;`core.fileMode` 保持 true(Windows 挂载盘场景按需处理)。

验证证据

- 本机(WSL Ubuntu,2026-08-29):

- 实测 1:`chmod 644` + `./nox.sh` → `Permission denied`,exit=126——与用户报错一致。

- 实测 2:`bash nox.sh` → 正常输出,exit=0(解释器调用不需要 x 位)。

- 实测 3:`chmod +x` + `./nox.sh` → 正常,exit=0。

- 实测复现日志(2026-08-29)

来源与证据

素材来源:https://stackoverflow.com/questions/18960689/ubuntu-says-bash-program-permission-denied

验证证据:Evidence details kept locally (2026-08-29)