Shellman是VSCode中最轻量、响应最快的Shell脚本骨架生成工具,内置check_deps、check_root等环境检查模板,安装后通过Ctrl+Shift+P调用Insert Snippet即可快速插入含shebang、set -euo pipefail及依赖校验的脚本骨架。
直接用 Shellman 插件插入预设模板
Shellman 是目前 VSCode 里最轻量、响应最快的 Shell 脚本骨架生成工具,它不依赖外部 CLI,也不需要配置 launch.json 或 shellcheck 路径,装完即用。关键在于它内置了带环境检查逻辑的常用模板,比如
、
、
等。
操作步骤很简单:
安装 Shellman 扩展(搜索
,作者是
)
新建一个
文件,按
→ 输入
→ 回车
从列表里选
(含 shebang、set -euo pipefail、基础参数校验)或
(额外加入
检查依赖项)
生成的骨架会自动包含类似这样的逻辑:
手动补全时别漏掉 set -euo pipefail 和变量引号
很多人复制模板后只改业务逻辑,却忽略两个致命细节:一是没启用严格模式,二是变量未加双引号。结果脚本在空格路径、空变量、管道失败时静默出错,排查成本翻倍。
必须写在脚本开头紧接 shebang 后面:
:任一命令非零退出立即终止(但注意
、
内部不触发)
:引用未声明变量时报错(避免
写成
还继续跑)
:让
中任意环节失败,整个管道返回失败码(否则默认只看
的退出码)
所有变量引用必须包在双引号里:
,不是
,也不是
错误示例:
→ 正确应为:
。ShellCheck 会报
,但如果你没开
为
,就看不到提示。
VSCode 1.118
微软正式发布 Visual Studio Code 1.118 版本 。本次更新重点强化了 AI 开发体验与企业管理能力,其中最引人注目的是新增 Copilot CLI 远程控制功能,允许开发者通过手机或网页远程监控和接管 AI 会话 。同时,为了提高 AI 的运行性价比,新版本优化了令牌缓存策略以降低成本 。此外,1.118 版还引入了 Chronicle 本地历史追踪、TypeScript 7.0 支持以及更严格的企业级访问管控 。
下载
VSCode 里快速验证环境检查逻辑是否生效
写完骨架别急着填业务代码,先本地验证检查逻辑是否真起作用。VSCode 集成终端(
)就是最直接的测试场,不用反复
+
。
验证要点:
删掉某个依赖命令(如临时重命名
),运行脚本看是否立刻报
用普通用户执行带
的脚本,确认提示
并退出
传空参数进去,比如
,检查
分支是否触发
注意:如果终端里执行没反应,先确认右下角语言模式是
(不是
),否则
呼出的终端不会自动 cd 到当前文件所在目录——你可能在错的路径下测试。
自定义模板要避开 .
vscode
/settings.json 全局污染
如果你习惯把常用检查逻辑(比如统一检查
是否开启)做成自己的 snippet,别直接往
里硬塞
配置。那会导致整个工作区所有
文件都加载该模板,干扰协作和 CI 流水线。
更安全的做法是:
把自定义 snippet 存为单独 JSON 文件,比如
在该文件中用
限定作用域
每个 snippet 的
取明确名称,如
,避免和 Shellman 默认前缀冲突
VSCode 会自动合并用户级 snippets,无需重启,输入前缀 + Tab 即可触发
真正容易被忽略的是:自定义 snippet 里的换行和缩进必须用真实制表符或空格,不能靠 VSCode 自动对齐——否则粘贴出来格式错乱,
可能被缩进到
块里,变成无效语句。
check_depscheck_rootcheck_argcshellmanhongyuanjun.shCtrl+Shift+PShellman: Insert Snippetbash_header_with_checksbash_script_with_depscommand -v#!/bin/bash
set -euo pipefail
Check if running as root
[[ $EUID -ne 0 ]] && { echo "Error: This script must be run as root." >&2; exit 1; }
Check required commands
for cmd in curl jq sed; do
command -v "$cmd" >/dev/null 2>&1 || { echo "Error: $cmd is not installed." >&2; exit 1; }
done
set -eifwhileset -u$USER_NAME$USERNAMEset -o pipefaila | b | cc"$VAR"$VAR'$VAR'cp $SRC $DSTcp "$SRC" "$DST"SC2086shellcheck.runonTypeCtrl+`chmod +x./script.shjqError: jq is not installed[[ $EUID -ne 0 ]]This script must be run as root./script.sh ""[[ -z "$1" ]]Shell ScriptPlain TextCtrl+`/proc/sys/net/ipv4/ip_forward.vscode/settings.jsonshellman.snippets.sh~/.vscode/snippets/shell-checks.code-snippets"scope": "shellscript"prefixcheck_ip_forwardset -euo pipefailif