新建.sh文件无语法高亮是因为VSCode未识别语言模式,需点击右下角“Plain Text”手动选“Shell Script”,或在settings.json中配置"files.associations": {"*.sh": "shellscript"};shebang不影响编辑时识别,仅决定运行时解释器。

新建.sh文件后没语法高亮,是VSCode没认出来
VSCode 不会自动把任意 .sh 文件当成 Shell 脚本处理——它靠语言模式(language mode)决定是否启用高亮、补全和检查。如果新建 deploy.sh 后右下角显示 “Plain Text”,说明语言模式没绑定成功。
解决方法很简单:
- 点击右下角语言标签(如 “Plain Text”),在弹出菜单中选 Shell Script 或 Bash
- 更彻底的做法:打开
settings.json,加这一行:"files.associations": {"*.sh": "shellscript"} - 如果仍无效,检查有没有其他插件劫持了
.sh关联(比如某些 YAML 或 Docker 插件)
为什么写了#!/bin/bash还是不生效
shebang 行只影响脚本**执行时**用哪个解释器,和 VSCode **编辑时**的语言识别完全无关。VSCode 读的是文件后缀 + files.associations 配置,不是第一行内容。
但注意两个真实陷阱:
- shebang 必须是文件**第一行**,前面不能有空行、BOM 或空格,否则系统执行时报
bad interpreter - 如果你用
#!/usr/bin/env bash,比硬写#!/bin/bash更兼容不同系统(比如 macOS 的 bash 版本常装在/opt/homebrew/bin/bash)
用快捷键新建文件却生成了.txt,怎么办
VSCode 默认新建文件不带扩展名,你敲 deploy 回车,得到的是 deploy(无后缀)。这时候它不会触发 files.associations 规则。
正确操作是:
- 新建文件后,**立刻重命名为
xxx.sh**(按 F2 或右键 → 重命名) - 或者在新建时直接输入完整名字:
deploy.sh,VSCode 会自动识别并切换语言模式 - 别依赖“新建文件 → 改后缀 → 再改语言模式”,容易漏掉一次手动切换
Windows 下新建.sh文件可能带CRLF换行符
Git Bash / WSL 环境下运行 ./script.sh 时,如果脚本报 ^M: command not found,大概率是 Windows 换行符(CRLF)导致的。
预防方式:
- 在 VSCode 右下角换行符标识处(如显示
CRLF),点击它,选LF - 一劳永逸:在
settings.json加上"files.eol": "\n" - 如果已用 Git,建议全局设置
git config --global core.autocrlf input(Linux/macOS/WSL 推荐)
shellcheck、shellman、格式化等才开始工作。别在空白 .sh 文件里敲几行就期待智能提示——先确保右下角明确显示 “Shell Script”。


















