VSCode本身不执行脚本或设权限,真正关键的是tasks.json/launch.json中调用的外部命令及其脚本自身的系统级执行权限;Linux/macOS需先chmod +x设可执行位,Windows用户若用WSL或Git Bash同样适用。

VSCode 工作区本身不执行脚本,也不直接“设置权限”或“共享脚本权限”——真正需要处理的是:你写在 tasks.json 或 launch.json 里调用的外部命令(比如 npm run build、./scripts/deploy.sh),以及这些脚本文件自身的操作系统级执行权限。共享行为则完全依赖 Live Share 的能力边界。
为什么 chmod +x 是第一步
Linux/macOS 下,VSCode 集成终端默认不会帮你给脚本加执行权限。哪怕 tasks.json 里写了 "command": "./scripts/test.sh",运行时也会报 Permission denied。
- 必须手动运行
chmod +x ./scripts/test.sh(或更安全的chmod 755) - Windows 用户可跳过,但若用 WSL 或 Git Bash,同样要加权限
- Git 提交前建议确认:执行
git ls-files -s ./scripts/test.sh,输出首列应为100755(表示已设可执行位),不是100644
tasks.json 里怎么安全调用本地脚本
VSCode 的 task 不会自动提升权限,也不会绕过系统限制。它只是按你写的路径和参数去执行 shell 命令。
- 避免绝对路径硬编码:
"command": "/home/alice/project/scripts/deploy.sh"→ 别这么写,换用工作区相对路径:"command": "${workspaceFolder}/scripts/deploy.sh" - 显式指定 shell(尤其 macOS/Linux):
"options": { "shell": { "executable": "/bin/bash", "args": ["-c"] } },防止 zsh 默认行为干扰 - 如果脚本依赖
node或python3,别假设 PATH 一致 —— Live Share 的 Guest 终端可能没加载你的~/.zshrc,推荐用完整路径:"command": "/usr/local/bin/node ./scripts/prebuild.js"
Live Share 共享后,脚本能被协作者运行吗
能,但有严格前提:脚本内容必须随工作区一起被共享(即在 Git 仓库内、未被 .gitignore 排除),且协作者的本地环境满足依赖(Node 版本、Python 模块等)。
- Live Share 不同步主机的全局
PATH、nvm环境或 shell 配置 —— 协作者运行脚本失败,90% 是因为command not found或module not found - 调试类脚本(如
launch.json中的preLaunchTask)在 Guest 端默认禁用调试控制权,即使脚本能跑,断点也不会生效,除非主机显式开启"debugging": true并授予协作模式 - 敏感操作(如
rm -rf、curl | bash)建议加提示或拆成两步:先echo "About to deploy — confirm? [y/N]",再read -r ans && [[ $ans == "y" ]] && real_deploy
容易被忽略的关键点
工作区脚本权限问题从来不是 VSCode 自身的 bug,而是三重脱节:文件系统权限、shell 环境隔离、Live Share 的能力边界。最常踩的坑是以为“共享了代码就等于共享了可运行性”——实际上,协作者得自己装好 Node、配好 Python 路径、甚至手动 chmod +x 才能跑通第一行 ./script.sh。别省略 README 里的 chmod 步骤说明,也别在 tasks.json 里埋没路径假设。











