vscode默认不运行shell脚本,需手动配置语言模式、执行器和权限:设"files.associations"绑定.sh为shellscript;code runner改用bash执行;脚本须含#!/usr/bin/env bash且chmod +x;shellcheck应设为bash模式避免误报。

VSCode 默认不运行 Shell 脚本,点右键“Run Code”或双击执行必然失败——这不是你脚本写错了,是 VSCode 根本没被配成 Shell 执行环境。
为什么 .sh 文件打开是 Plain Text,高亮和提示全失效
VSCode 不靠 .sh 后缀自动识别语言,它依赖 files.associations 显式绑定语言 ID。没配就永远是纯文本。
- 点击右下角语言标签(如 “Plain Text”),手动选
Shell Script仅临时生效 - 永久解决:在
settings.json中加这一行:"files.associations": {"*.sh": "shellscript"} - 别装 “Shell Format” 类插件来救高亮——那是格式化工具,不改语言识别逻辑
- 若文件无后缀(如
deploy或Dockerfile中的 RUN 行),需额外加关联:"deploy": "shellscript"
Code Runner 点一下就报错:[[: not found 或 command not found: declare
这是最典型的 Bash vs sh 解释器错配。Code Runner 默认用 /bin/sh 执行,但你的脚本用了 [[ ]]、source、数组等 Bash 特性,/bin/sh 直接不认。
- 查当前配置:设置里搜
code-runner.executorMap,找到shellscript对应项 - 改成:
"shellscript": "bash -c 'cd $dir && source ~/.bashrc; $fileName'"(Linux/macOS) - 更轻量稳妥的做法:不依赖 Code Runner,按
Ctrl+`呼出集成终端,直接敲bash script.sh - 如果坚持用
./script.sh,必须提前chmod +x script.sh,且首行#!/usr/bin/env bash比#!/bin/bash更兼容不同系统
ShellCheck 一堆 SC2034/SC2155 报警,但脚本能跑,该 ignore 吗
不是 bug,是 ShellCheck 默认按 POSIX sh 标准检查,而你写的是 Bash 脚本。比如 local var=1 在 Bash 合法,在 POSIX 里不合法——报警只是提醒“不跨 shell 兼容”,不是“有运行时错误”。
- 确认本地已安装:
shellcheck(macOS 用brew install shellcheck,Ubuntu 用sudo apt install shellcheck) - VSCode 设置里搜
shellcheck,把ShellCheck: Shell选项设为bash(不是sh或空) - 变量引用不加双引号(如
echo $PATH)会被标红——这是真危险,含空格路径时必崩,别跳过 - 临时忽略某行可用:
# shellcheck disable=SC2034;全局忽略某类用# shellcheck source=/dev/null
调试时 F5 报错 “Cannot find debugger bashdb” 或根本没反应
VSCode 自带调试器不支持 Bash,必须靠外部调试器 bashdb + 插件协作,而 bashdb 在 macOS 上极难装、Linux 需编译、Windows 基本不可用——多数人卡在这一步就放弃图形化调试。
- 最可靠替代方案:用 Bash 自带追踪模式,在终端运行
bash -x ./script.sh,所有展开变量、执行路径一目了然 - 真要图形断点:先装
bashdb(macOS:brew install bashdb;Ubuntu:sudo apt install bashdb),再装扩展rogalmic.bash-debug(注意不是已停更的旧版) - 项目根目录建
.vscode/launch.json,必须确保program字段指向绝对路径,且脚本有#!/usr/bin/env bash和chmod +x - 别指望 “一键调试” 自动处理 shebang、权限、环境变量——每个环节都可能断链
真正容易被忽略的,是 #!/usr/bin/env bash 和 chmod +x 这两件事必须同时成立,缺一不可;而 VSCode 从不帮你自动补上任一个。它只负责编辑,剩下的全是环境责任。











