shelljs报“permission denied”通常源于底层命令权限问题而非node权限:powershell策略拦截.ps1脚本、目标路径无写入权、脚本缺少执行位(x位)或ntfs挂载路径不支持chmod。

ShellJS执行失败报“Permission denied”不是Node权限问题
ShellJS本身不触发系统级权限校验,它只是封装了child_process.exec调用系统命令。你看到的“Permission denied”,99%是底层命令(比如cp、mkdir、chmod)在执行时被拦截,而非ShellJS或Node.js缺权限。
常见诱因有三个:PowerShell策略阻止.ps1脚本执行、目标路径无写入权、脚本文件缺少x位(Linux/macOS/WSL)。先看错误里有没有File xxx.ps1 cannot be loaded because running scripts is disabled——如果有,直接跳到下一条。
PowerShell策略卡住ShellJS spawn的.ps1脚本
ShellJS默认用spawn启动子进程,如果脚本是.ps1后缀,且VSCode终端是PowerShell(默认),就会撞上Restricted策略。哪怕你只写了shell.exec('build.ps1'),也会被静默拒绝。
使用 JSON Schema 验证 JSON 数据,从示例 JSON 生成 schema,并将其转换为 TypeScript 接口、Python 数据类或 Markdown 文档。
- 在VSCode终端中运行:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser - 验证生效:
Get-ExecutionPolicy -Scope CurrentUser应返回RemoteSigned - 关掉所有终端面板(Ctrl+Shift+` → 点×全部关闭),再新建一个——旧终端不会刷新策略
- 别用
Bypass或Unrestricted,公司设备可能被组策略覆盖
ShellJS调用chmod/cp/mkdir失败的真实原因
ShellJS的chmod、cp、mkdir等方法失败,通常不是代码写错,而是路径或上下文不对:
- 脚本放在
/mnt/c/(WSL挂载的NTFS盘)下:chmod +x无效,NTFS不存POSIX权限位;把项目移到~/projects再试 - 目标目录不可写:比如
shell.cp('src/*', '/usr/local/bin')——普通用户没权写/usr/local/bin,换成~/bin或./dist - 路径含空格或中文:ShellJS对空格敏感,
shell.cp('my file.txt', 'dest/')会失败;加引号或改用shell.cp(['my file.txt'], 'dest/') - Shebang写错或换行符是CRLF:Linux下
#!/bin/bash脚本若用Windows编辑器保存,CRLF会导致bash解析失败,报Permission denied
Node进程本身不需要执行位,但ShellJS调用的脚本需要
node index.js永远不需要chmod +x,Node直接读取JS文件执行。但ShellJS若调用shell.exec('./deploy.sh'),这个deploy.sh就必须有x位——尤其在WSL/Linux/macOS下。
- 确认脚本路径是原生Linux路径(非
/mnt/c/xxx),再运行:chmod +x deploy.sh - 检查shebang是否匹配解释器:
head -n1 deploy.sh应输出#!/bin/bash或#!/usr/bin/env node - 避免在Windows侧创建.sh文件后直接扔进WSL——用
dos2unix deploy.sh转LF换行符 - 如果必须跨平台,改用
shell.exec('bash deploy.sh')绕过执行位校验(但会损失性能)
shell.echo(shell.error())往往只返回1,看不出具体哪步失败。建议在关键步骤后加if (!shell.which('xxx')) shell.echo('missing: xxx')做前置检查,比硬扛Permission denied更省时间。










