VSCode本身不运行Shell脚本,执行依赖终端+shebang+执行权限三要素;右键“Run Code”无反应因VSCode不自动加chmod+x也不默认调用bash;解决需设#!/usr/bin/env bash、chmod +x、在终端运行./script.sh或bash script.sh。

VSCode 本身不运行 Shell 脚本,它只负责编辑;真正执行靠终端 + 正确的文件状态 + 显式调用解释器。 想点一下就跑起来,必须手动补全三要素:shebang、执行权限、终端命令,缺一不可。
为什么右键“Run Code”或双击没反应
因为 VSCode 默认不处理 .sh 文件的执行逻辑——它既不会自动加 chmod +x,也不会默认用 bash 而不是 sh 解释器。常见报错包括:
-
Permission denied:文件没执行权限 -
command not found: [[或line 5: declare: command not found:Code Runner 用/bin/sh执行了 Bash 语法脚本 -
No such file or directory:shebang 写成#!/bin/bash,但系统里 bash 在/usr/bin/bash(如 macOS Catalina+)
解决办法不是换插件,而是明确控制执行方式:
- 确保首行是
#!/usr/bin/env bash(兼容性更好) - 保存后在终端执行
chmod +x script.sh - 在 VSCode 内置终端(
Ctrl+`)中运行./script.sh或bash script.sh(后者绕过权限检查)
用 Code Runner 插件但要改执行命令
Code Runner 默认对 shell 类型用 /bin/sh -c,但你的脚本大概率是 Bash 风格。不改就会静默失败或报错。
进设置搜 code-runner.executorMap,找到 shell 对应项,改成:
"shell": "bash -c 'cd $dir && bash $fileName'"
注意几点:
- 别用
$fullFileName,它可能带空格或特殊字符,$fileName更安全 - 如果脚本依赖
~/.bashrc里的 alias 或函数,加上source ~/.bashrc && - Windows 用户在 WSL 里用这个配置没问题;纯 PowerShell 环境下
.sh文件根本无法执行,别硬试
更可控的方式:配 tasks.json 自定义任务
比改插件设置更稳定,尤其适合团队协作或 CI/CD 场景。在项目根目录建 .vscode/tasks.json,内容如下:
{
"version": "2.0.0",
"tasks": [
{
"label": "run bash script",
"type": "shell",
"command": "bash",
"args": ["${file}"],
"group": "build",
"presentation": {
"echo": true,
"reveal": "always",
"focus": false,
"panel": "shared",
"showReuseMessage": true,
"clear": true
}
}
]
}
这样按 Ctrl+Shift+P → “Tasks: Run Task” → 选 “run bash script”,就能用当前打开的 .sh 文件路径直接执行。优势在于:
- 不依赖插件行为,执行逻辑完全透明
-
${file}是绝对路径,不怕 cd 错乱 - 可轻松扩展参数,比如加
-x开启调试模式:"args": ["-x", "${file}"]
终端里中文乱码、locale 不生效怎么办
这不是脚本问题,是 VSCode 终端环境和系统 locale 没对齐。典型现象:脚本里 echo "你好" 输出问号,或 ls 列出中文文件名变成 ???。
先在终端里运行 locale,确认 LANG 是类似 en_US.UTF-8 或 zh_CN.UTF-8 的值。如果不是:
- 临时修复:
export LANG=en_US.UTF-8 - 永久生效:在 VSCode
settings.json中加
"terminal.integrated.env.linux": { "LANG": "en_US.UTF-8" },
"terminal.integrated.env.osx": { "LANG": "en_US.UTF-8" }
Windows + WSL 用户额外注意:WSL 自身也要配 /etc/wsl.conf,否则 VSCode 设置无效。
最易被忽略的一点:VSCode 启动时会读取一次终端环境,改完设置必须关掉所有终端面板再新开,重载窗口都不行。











