vscode运行shell脚本失败的根本原因是code runner默认用/bin/sh执行,而脚本含bash特有语法;需确保shebang正确(#!/usr/bin/env bash)、手动chmod +x、显式用bash script.sh调用,并在wsl中配置locale与路径。

VSCode 本身不运行 Shell 脚本,所谓“运行”只是调用终端执行命令;点右键“Run Code”没反应、报 [[ not found 或 Permission denied,基本都卡在三件事上:#!/usr/bin/env bash 没写对、没 chmod +x、没在终端里用 bash script.sh 或 ./script.sh 显式调用。
为什么点“Run Code”总报 [[ not found 或 declare: command not found
Code Runner 默认用 /bin/sh -c 执行 .sh 文件,但你的脚本用了 Bash 特有语法(比如 [[ ]]、source、数组、$(( ))),而 /bin/sh 不认这些。
- 临时验证:在 VSCode 集成终端(
Ctrl+`)里直接运行bash script.sh,如果能跑,就是解释器错配 - 别改
$fullFileName:它可能含空格或特殊字符;$fileName更安全 - 若脚本依赖
~/.bashrc里的 alias 或函数,得显式加source ~/.bashrc && $fileName - 改法(仅限 Linux/macOS):设置里搜
code-runner.executorMap,把shellscript对应值改成"bash -c 'cd $dir && source ~/.bashrc; bash $fileName'"
shebang 必须是第一行且无 BOM
VSCode 不校验 shebang 是否合法,也不会帮你删隐藏字符。哪怕前面有一个空格、一个 UTF-8 BOM 或注释行,系统都会忽略 shebang,退回到用 /bin/sh 执行,Bash 语法立刻崩。
微软正式发布 Visual Studio Code 1.118 版本 。本次更新重点强化了 AI 开发体验与企业管理能力,其中最引人注目的是新增 Copilot CLI 远程控制功能,允许开发者通过手机或网页远程监控和接管 AI 会话 。同时,为了提高 AI 的运行性价比,新版本优化了令牌缓存策略以降低成本 。此外,1.118 版还引入了 Chronicle 本地历史追踪、TypeScript 7.0 支持以及更严格的企业级访问管控 。
- 检查方式:终端里运行
head -n1 script.sh | cat -A,看到^M或M-oM-?M-就是 BOM;看到#前有空格就说明不对 -
#!/bin/bash在 macOS Catalina+、Alpine、某些 Docker 镜像里会报No such file or directory,因为 bash 实际在/usr/bin/bash -
#!/usr/bin/env bash是唯一跨平台兼容写法:它通过$PATH查找bash,几乎所有 Unix-like 系统都支持
必须手动 chmod +x,VSCode 绝不会自动加
Linux/macOS 要求脚本有执行权限才能用 ./script.sh 运行。VSCode 是编辑器,不是文件管理器,它既不提示、也不帮你加权限。
- 保存后,在集成终端中执行:
chmod +x ./script.sh(注意是./开头,不是script.sh) - 确保当前终端工作目录和脚本位置一致;右键文件 → “Open in Integrated Terminal” 可自动
cd进去 - 之后才能安全运行:
./script.sh;如果仍报错,优先用bash script.sh排查 - Windows 用户注意:纯 PowerShell / CMD 不认
.sh;WSL 下可用,但要确保 locale 是 UTF-8(locale命令看LANG)
Windows 下只能走 WSL,别硬试 PowerShell
Windows 原生不支持 bash 解释器,也默认没有 chmod 或 shebang 机制。右键“Run Code”或双击 .sh 文件几乎必然失败。
- 唯一可行路径:安装 WSL2 + Ubuntu 等发行版,并在 VSCode 中安装
Remote - WSL扩展 - VSCode 必须打开 WSL 文件系统中的项目(路径形如
/home/username/project/),而非 Windows 盘(C:) - 禁用 Code Runner 对
.sh的支持——强行指定 Git Bash 路径会导致路径转义、工作目录错位、TTY 不兼容等问题极多 - 中文路径乱码?不是脚本问题,是 WSL locale 和 VSCode 终端编码没对齐;需同时配
/etc/wsl.conf和 VSCode 设置terminal.integrated.env.linux
真正可控的调试方式只有 bash -x,VSCode 官方不支持 Bash 断点调试;别指望一键按钮能处理权限、shebang、PATH、locale 四重歧义——每一步都得你亲手确认。










