2025年7月10日

Gemini CLI 的坑:Shell命令和交互式指令是两回事


前言

我第一次装 Gemini CLI 时,只会用 gemini "hello" 这种最基础的调用。直到某天翻文档看到 /chat save,才意识到这东西远不止一个命令行聊天工具那么简单。

它的命令系统其实分两层:一层是在系统 Shell 里启动任务的外层命令,另一层是进入交互式会话后才能用的内置指令。这个双层结构一开始让我挺困惑的,但搞明白之后发现确实比单层设计灵活很多。

Shell 命令层:脚本化调用的入口

这层命令在系统 Shell 里执行,主要用来启动任务或做一次性操作。

gemini [flags] [prompt] — 主命令

最常用的就是这个。它的价值不在于聊天,而在于可以通过 flags 实现脚本化调用:

  • -m: 指定本地文件(图片、视频)进行多模态输入
  • -s: 流式输出,能即时看到响应而不是干等
  • -o json: 输出 JSON 格式,方便和其他脚本集成
  • 管道支持: cat error.log | gemini "分析这段报错" 这种用法在调试时很顺手

我试过用管道传 10MB 日志文件,结果直接超 Token 限制被拒了。后来学会先用 head -n 100 截取再传,才解决问题。

gemini check — 诊断工具

初次配置时必跑的命令。它会检查 API 连接、认证和服务状态。我之前遇到过一次莫名其妙的 403 错误,跑了这个才发现是项目 ID 配错了。

gemini count-tokens — Token 计数器

大模型按 Token 计费,这命令用来估算成本。在提交长文本前先跑一下,避免被账单吓到。

说白了,这层命令就是负责启动、单次任务和环境诊断的。

交互式命令层:会话中的精细控制

直接运行 gemini 进入交互式会话后,这层指令才开始发挥作用。它们通过特殊前缀(/, @, !)调用,用来精细控制会话行为。

/ 斜杠命令:控制工具本身

这类命令不会发给 AI,而是控制 CLI 工具的状态。

会话管理

  • /chat save|resume|list: 保存和恢复对话。我常用这个切换不同探索分支,比如同时测试两种代码重构方案。
  • /compress: 压缩上下文。我测过一次 150 轮对话的压缩,Token 从 9000 降到 1200,但发现中间有段调试信息丢了,所以压缩前最好先 /chat save 备份。
  • /clear (或 Ctrl+L): 清屏
  • /quit / /exit: 退出

上下文管理

  • /memory add|show|refresh: 管理从 GEMINI.md 加载的”分层指令内存”。这是给 AI 提供持久化背景知识的机制,比每次重复输入提示高效。不过我花了两天才搞明白它和 @ 的区别 — /memory 是全局的,@ 是单次注入。
  • /restore: 回滚操作。如果 AI 修改了本地文件,这命令能恢复到执行前的状态。重要的安全保障。

环境与查询

  • /stats: 显示 Token 使用量、缓存节省等数据
  • /mcp: 列出已配置的 MCP (Model Context Protocol) 服务器。说明 CLI 可以通过协议连接外部服务。
  • /tools: 列出当前可用的所有工具

@ 符号命令:文件注入

这是开发者最常用的功能 — 把本地文件或目录内容注入到提示中。

用法: @src/main.go "这段代码有什么问题?"

核心特性:

  • Git 感知: 默认忽略 .gitignore 里的东西,不会把 node_modules 传给 AI
  • 目录支持: 可以直接传目录,工具会自动读取里面的文本文件

我踩过一次坑:用 @. 注入整个项目根目录,结果因为包含了二进制文件导致解析失败。后来学会指定具体子目录才解决。

! 感叹号命令:Shell 直通

在 CLI 内部直接执行系统命令。

  • !<command>: 单次执行,如 !git status
  • !: 单独输入可在 Gemini 模式和纯 Shell 模式间切换,方便连续执行多条系统命令

写在最后

这个双层设计一开始让我很困惑,但用了一周后确实感受到比单层命令灵活。外层负责脚本化和自动化,内层负责深度交互和上下文管理。

不过说实话,现在用 Gemini CLI 的人越来越少了。我观察到周围不少开发者都迁到了 Antigravity 或其他 Claude/Codex 的 CLI 工具 — 主要原因是它们能反代多个模型,不用为每个 API 单独配置一套环境。Gemini CLI 的双层指令设计确实精巧,但生态和灵活性上还是输了一筹。

如果你只是想快速上手一个 AI CLI,可能直接用 Antigravity 更省事。但如果你想深入理解这类工具的设计思路,Gemini CLI 的双层架构还是值得研究的 — 至少它让我明白了”Shell 命令”和”交互式指令”应该如何分工。