Mac/Linux下执行Shell脚本提示"Permission denied"的完美解决办法
内容
在日常开发中,当我们尝试在 macOS 或 Linux 系统的终端中运行 Shell 脚本(例如安装脚本)时,可能会遇到类似以下的错误提示:
```bash
DP@lib00-iMac ~/sys_keep/wiki.lib00 % scripts/install.sh
zsh: permission denied: scripts/install.sh
```
## 原因分析
在 Unix/macOS 操作系统中,出于安全考虑,并非所有文件都可以直接作为程序运行。直接通过路径执行文件要求该文件必须具备可执行(`x`, execute)权限。我们从外部下载的脚本代码(如 `lib00` 项目的安装包)或新建的脚本,默认通常只有读(`r`)和写(`w`)权限,因此系统会拒绝执行并抛出 "permission denied" 错误。
---
## 解决方案
### 方法一:赋予文件可执行权限(推荐)
这是最标准且一劳永逸的做法。使用 `chmod` 命令为脚本添加执行权限:
```bash
# 为脚本添加可执行权限
chmod +x scripts/install.sh
# 再次运行脚本
./scripts/install.sh
```
### 方法二:显式调用解释器执行
如果你不想修改文件本身的权限,或者只是临时运行一次,可以直接调用 `bash` 或 `sh` 解释器来执行该脚本。此时解释器只需要具有读取该文件的权限即可:
```bash
bash scripts/install.sh
```
---
## 扩展技巧:如何查看文件权限?
你可以使用 `ls -l` 命令来查看当前文件的权限状态:
```bash
ls -l scripts/install.sh
# 输出示例: -rw-r--r-- 1 DP staff 128 May 10 10:00 scripts/install.sh
```
如果最前面的一串字符中没有 `x`(如 `-rw-r--r--`),就说明缺少执行权限。执行 `chmod +x` 后,它会变成 `-rwxr-xr-x`,此时就可以顺利运行了。更多技术文档与疑难解答,请访问 wiki.lib00.com。
关联内容
解决 Nginx 访问 PHP Imagick 生成的 WebP 图片提示 Permission Denied (13) 错误
时长: 00:00 | DP | 2026-07-05 21:17:00解决 Mac mini 无法接收手机短信 (SMS) 及 iMessage 同步卡死的问题
时长: 00:00 | DP | 2026-07-06 22:07:00群晖 NAS 部署 MySQL Docker 踩坑记:轻松搞定“Permission Denied”权限错误
时长: 00:00 | DP | 2025-12-03 21:19:10macOS 新终端无法识别 nvm/node 命令?只需两步,永久解决!
时长: 00:00 | DP | 2025-12-04 09:35:00一行命令搞定网站稳定性测试:终极 Curl 延迟检测 Zsh 脚本
时长: 00:00 | DP | 2025-12-07 23:25:50Docker 容器如何访问 Mac 主机?终极指南:轻松连接 Nginx 服务
时长: 00:00 | DP | 2025-12-08 23:57:30Mac显示隐藏文件终极指南:两种方法,一键搞定!
时长: 00:00 | DP | 2025-12-12 01:32:30解密 macOS 上的 `realpath: command not found` 及其连锁错误
时长: 00:00 | DP | 2025-11-19 12:45:02Linux命令行揭秘:为什么`ll`看不到`.idea`等隐藏文件?`ls`与`ll`的终极对决
时长: 00:00 | DP | 2025-12-01 08:08:00Mac 高手必备技巧:一键显示/隐藏 Finder 中的文件
时长: 00:00 | DP | 2025-11-19 21:16:36macOS hosts 文件不支持通配符?别急,Dnsmasq 才是终极解决方案!
时长: 00:00 | DP | 2025-11-20 05:48:10Shell 妙用:如何将多个命令的输出优雅地写入同一个日志文件?
时长: 00:00 | DP | 2025-12-17 04:10:504个命令行妙招:快速定位NFS网络共享的本地挂载点
时长: 00:00 | DP | 2025-11-22 17:29:05Mac下NFS共享文件为何凭空多出一份?揭秘“._”幽灵文件与PHP解决方案
时长: 00:00 | DP | 2025-12-18 16:58:20Linux `cp` 命令终极指南:告别复制文件时的常见陷阱
时长: 00:00 | DP | 2025-12-23 19:36:40Linux `rm` 命令终极指南:如何安全高效地删除文件夹
时长: 00:00 | DP | 2025-12-24 07:52:30Linux文件权限终极指南:从`chmod 644`到神秘的`@`符号
时长: 00:00 | DP | 2025-12-25 08:24:10Linux命令行奇技:3种方法瞬间清空大文件内容
时长: 00:00 | DP | 2025-12-27 21:43:20相关推荐
搞定 Chart.js:如何用双Y轴优雅展示量级差异巨大的数据?
00:00 | 171次在同一个 Chart.js 图表中同时展示累计总数(如总视频数上千)和每日新增(个位数)时,是否遇到...
PHP高手进阶:如何优雅地用一个数组的值过滤另一个数组的键?
00:00 | 131次在PHP开发中,经常需要根据一个列表(数组)来筛选另一个关联数组的数据。本文详细介绍了两种核心方法:...
CSS 解惑:为什么我的 :nth-child(1) 选择器不起作用?
00:00 | 62次你是否曾困惑于为什么 `:nth-child(1)` 无法选中你期望的第一个元素,反而需要用 `:n...
深入解析:向 MySQL DATETIME 字段插入 Unix 时间戳的正确姿势与陷阱
00:00 | 13次将一个Unix时间戳(如1764975600)直接插入MySQL的DATETIME字段会成功吗?答案...