终端命令执行
终端命令执行
Claude Code 通过 Bash(及 Windows 上的 PowerShell)在本地 Shell 执行命令。本章覆盖工具能力、沙箱、权限、终端兼容与非交互用法。
Bash 工具
能力范围
- 包管理:
npm/yarn/pnpm/pip/cargo等 - 构建、测试、lint、格式化
- 文件系统:
mkdir、cp、mv、rm(高风险会额外警告) - 网络:
curl、wget(受权限与沙箱约束) - 管道、重定向、脚本、Git 操作
Claude 在调用前会分析命令风险;rm -rf /、sudo、chmod 777 等即使用户规则允许也可能触发强警告。
权限控制
默认每次 Bash 需确认(除非 acceptEdits/auto/预批准规则):
{
"permissions": {
"allow": [
"Bash(npm run *)",
"Bash(npm test *)",
"Bash(git status)",
"Bash(git diff *)",
"Bash(git log *)"
],
"deny": [
"Bash(curl *)",
"Bash(rm -rf *)",
"Bash(sudo *)"
]
}
}内容级 ask 规则(如 Bash(git push *))即使命令在沙箱内也会强制弹窗。
! 前缀与 Shell 模式
输入框中以 ! 开头可直接跑 Shell 命令(不经过 Claude 推理),相当于快捷终端。默认 shell 由 defaultShell 设置(bash 或 powershell)。
Skill / 自定义命令中的 ```! 块也可执行行内 shell(Managed 可 disableSkillShellExecution 禁用)。
沙箱 Bash(第 5 章详述)
/sandbox 配置操作系统级隔离(macOS Seatbelt / Linux bubblewrap):
| 模式 | 行为 |
|---|---|
| Auto-allow | 沙箱内命令自动批准;越界则回退普通权限流 |
| Regular permissions | 沙箱内仍逐条确认 |
默认沙箱内可写:工作目录 + 会话 temp 目录。首次访问新网络域名会提示批准。
allowUnsandboxedCommands:沙箱失败时是否允许dangerouslyDisableSandbox重试(Overrides 里可关 = Strict)excludedCommands:始终沙箱外执行的命令(WSL 下需调用 Windows 二进制时)- WSL2 沙箱不能启动
/mnt/c/下 Windows 二进制
Linux/WSL2 依赖 bubblewrap、socat;Alpine 需额外装 ripgrep 并可能设 USE_BUILTIN_RIPGREP=0。
PowerShell 工具(Windows)
v2.1.126+ Windows 可将 PowerShell 作为主 Shell:
export CLAUDE_CODE_USE_POWERSHELL_TOOL=1
# 或
claude --tools "Bash,Edit,Read,PowerShell"- 检测 PowerShell 7(Store / MSI / dotnet global tool)
- Skill frontmatter
shell: powershell让 Skill 内!走 PowerShell - 无 Git for Windows 时 Claude Code 默认用 PowerShell 替代 Bash
Monitor 工具(v2.1.98+)
Monitor 让 Claude 订阅命令输出流(如 npm run dev 日志),在匹配模式时行动——适合「跑 dev server 直到编译成功」类任务。遵循与 Bash 相同的权限规则;Bedrock/Vertex/Foundry 不可用。
环境变量持久化
SessionStart Hook 可通过 CLAUDE_ENV_FILE 写入变量,供后续所有 Bash 继承(见第 14 章)。
注意:沙箱内 $TMPDIR 指向会话 temp;非沙箱命令仍用 shell 原 $TMPDIR——跨边界传临时文件请用工作目录。
终端兼容性
全屏 alternate screen 已适配:iTerm2、WezTerm、Kitty、Ghostty、Windows Terminal、VS Code/JetBrains 集成终端。
| 问题 | 处理 |
|---|---|
| 偏好原生滚动 | export CLAUDE_CODE_DISABLE_ALTERNATE_SCREEN=1 |
| VS Code/Cursor 乱码、方块字 | 会话内 /terminal-setup 关闭 GPU 加速 |
| 退出后 Ctrl+C 异常 | v2.1.85+ 已修多数终端;仍异常可禁用 alternate screen |
| Tmux + Ctrl+B | 按两次(prefix 冲突) |
键盘增强模式退出时自动恢复终端状态。
非交互模式(-p)
# 分析日志
tail -200 app.log | claude -p "分类所有异常并给出修复建议"
# CI 翻译
claude -p "将新字符串翻译为法语并开 PR" --permission-mode acceptEdits
# 批量审查
git diff main --name-only | claude -p "审查这些文件的安全问题"
# JSON 输出(脚本集成)
claude -p "列出 API 路由" --output-format json-p 模式:
- 支持
--permission-mode、--max-turns、--max-budget-usd - Computer Use 不可用
--no-session-persistence不写会话历史- 管道 stdin 像 Unix 工具一样工作
搜索依赖 ripgrep
Search、@file、Glob 依赖 bundled ripgrep。若平台 binary 无法运行,安装系统 ripgrep 并设 USE_BUILTIN_RIPGREP=0。WSL 跨 /mnt/c/ 工作区搜索可能结果偏少——尽量把项目放在 Linux 文件系统(/home/)。
与 Subagent / Worktree 协作
- 大量探索:「用 subagent 调查 XX」——Bash 输出不填满主 context
- 并行改文件:subagent
isolation: worktree或claude --worktree(第 17 章) - Background Bash:
Ctrl+B后台化当前命令;/tasks查看
资料来源:Sandboxed Bash、CLI reference、Common workflows - Pipe、Troubleshooting