vscode本身不运行shell脚本,windows下必须通过wsl2+remote-wsl扩展,在wsl文件系统中打开项目、添加shebang和执行权限后,才能正确运行.sh文件。

VSCode 本身不运行 Shell 脚本,它只是编辑器;在 Windows 上直接运行 .sh 文件几乎必然失败——因为 Windows 原生不支持 bash 解释器,也默认没有 chmod 或 shebang 机制。真正能跑起来,靠的是你主动选对执行环境,而不是点“运行”按钮。
Windows 下 VSCode 运行 .sh 文件的唯一可行路径
别指望双击、右键“Run Code”或直接敲 ./script.sh 能成功。Windows 的 CMD/PowerShell 不认识 .sh,也不会解析 #!/usr/bin/env bash。
- 必须用 WSL(Windows Subsystem for Linux):这是目前最稳定、最接近原生 Linux 的方式。安装 WSL2 + 任一发行版(如 Ubuntu),并在 VSCode 中安装 Remote - WSL 扩展
- VSCode 需打开 WSL 文件系统中的项目(路径形如
/home/username/project/),而非 Windows 盘(C:...) - 脚本首行必须是有效 shebang,推荐
#!/usr/bin/env bash(/bin/bash在某些 WSL 发行版中可能不存在) - 必须手动加执行权限:
chmod +x script.sh—— VSCode 不会帮你做这事 - 在 WSL 终端中运行:
./script.sh(当前目录)或bash script.sh(绕过权限检查,仅调试用)
code-runner 在 Windows 上执行 .sh 文件为什么总报错
Code Runner 插件在 Windows 默认调用 sh 或 cmd,而这俩都不认 Bash 语法(比如 [[ ]]、source、数组)。错误现象包括:line 5: [[: not found、command not found: declare。
- 不要改
code-runner.executorMap让它去调用 Windows 下的 Git Bash 或 MSYS2 —— 路径空格、环境变量缺失、TTY 不兼容问题极多 - 即使强行指定
"shellscript": "C:\Program Files\Git\bin\bash.exe -c '$fullFileName',也会因 Windows 路径转义、工作目录错位而失败 - 真正省心的做法:禁用 Code Runner 对
.sh的支持,在设置里搜code-runner.fileDirectory,把它设为file并确保只在 WSL 环境下使用终端
中文路径或参数在 WSL + VSCode 中乱码怎么办
不是脚本写错了,是 WSL 的 locale 和 VSCode 终端编码没对齐。常见表现:echo $PWD 显示问号、read -p "请输入:" input 输入中文后变量为空、ls 列出文件名乱码。
- 先确认 WSL 中 locale 是否启用 UTF-8:
locale | grep UTF-8;若无,编辑/etc/wsl.conf,加入:[boot] command = "sudo update-locale LANG=en_US.UTF-8"
- VSCode 设置中添加:
terminal.integrated.env.linux→{"LANG": "en_US.UTF-8"} - 脚本内读取中文参数时,别裸写
$1,改用"$1"(双引号包裹),否则 word splitting 会截断空格和 Unicode 字符 - 避免在脚本中硬编码 Windows 路径(如
C: emp),WSL 中应写作/mnt/c/temp,且需确保该路径已通过wsl --mount挂载
最容易被忽略的一点:VSCode 必须通过 WSL 启动(即在 WSL 终端中执行 code .),而不是从 Windows 图标启动。后者会导致 VSCode 进程运行在 Windows 用户空间,即使打开了 WSL 文件,终端仍可能加载 Windows 的 shell 环境,PATH、locale、甚至 which bash 都不可靠。











