Claude Code CLI 是 Anthropic 官方提供的命令行工具,用于与 Claude AI 进行交互。本文档基于官方文档整理,重点关注在容器和 Web Terminal 环境中的使用。
# 启动交互式会话
claude
# 带初始提示词启动
claude "你的问题"
# 继续最近的会话
claude -c
# 恢复特定会话
claude -r "<session-id>" "继续的问题"# 打印响应并退出(适合脚本和自动化)
claude -p "你的问题"
claude --print "你的问题"
# 通过管道输入
cat file.txt | claude -p "分析这个文件"
echo "内容" | claude -p "处理这个内容"claude --model sonnet "问题" # 使用 Sonnet 模型
claude --model opus "问题" # 使用 Opus 模型# 文本格式(默认)
claude -p --output-format text "问题"
# JSON 格式(单一结果)
claude -p --output-format json "问题"
# 流式 JSON(实时流)
claude -p --output-format stream-json "问题"# 文本输入(默认)
claude -p --input-format text "问题"
# 流式 JSON 输入
claude -p --input-format stream-json# 跳过权限检查(危险,仅用于自动化)
claude --dangerously-skip-permissions -p "问题"
# 设置权限模式
claude --permission-mode auto # 自动模式
claude --permission-mode review # 审查模式
claude --permission-mode deny # 拒绝模式
# 指定允许的工具
claude --allowedTools read,write -p "问题"
# 添加工作目录
claude --add-dir /path/to/dir -p "问题"# 限制 agentic turns
claude --max-turns 5 -p "问题"
# 详细日志
claude --verbose -p "问题"
# 调试模式
claude --debug -p "问题"# Anthropic API Token(必需)
export ANTHROPIC_AUTH_TOKEN="your_token_here"
# API Base URL(可选,用于自定义端点)
export ANTHROPIC_BASE_URL="https://api.anthropic.com"# 终端类型
export TERM=xterm-256color
# 颜色支持
export COLORTERM=truecolor
# 禁用颜色(在某些环境中有用)
export NO_COLOR=1问题描述:
- Claude Code CLI 在非交互式 PTY 环境中可能卡死
- 特别是使用
--dangerously-skip-permissions参数时
解决方案:
# 使用 echo 管道
echo "你的提示词" | claude -p
# 使用 printf 避免转义问题
printf "%s" "你的提示词" | claude -p
# 使用 heredoc
claude -p << EOF
你的多行
提示词
EOF# 写入临时文件
echo "提示词" > /tmp/prompt.txt
cat /tmp/prompt.txt | claude -p
rm /tmp/prompt.txtscript -qc "echo '提示词' | claude -p" /dev/null# Dockerfile 示例
FROM node:22-alpine
# 安装必要工具
RUN apk add --no-cache bash
# 安装 Claude Code CLI
RUN npm install -g @anthropic-ai/claude-code
# 设置环境变量
ENV ANTHROPIC_AUTH_TOKEN="your_token"
ENV TERM=dumb
ENV NO_COLOR=1
# 工作目录
WORKDIR /app// 使用 child_process 执行
const { exec } = require('child_process');
const util = require('util');
const execPromise = util.promisify(exec);
async function executeClaude(prompt) {
// 转义特殊字符
const escapedPrompt = prompt
.replace(/"/g, '\\"')
.replace(/\$/g, '\\$')
.replace(/`/g, '\\`');
try {
// 使用管道方式执行
const { stdout, stderr } = await execPromise(
`echo "${escapedPrompt}" | claude -p`,
{
env: {
...process.env,
ANTHROPIC_AUTH_TOKEN: process.env.ANTHROPIC_AUTH_TOKEN,
TERM: 'dumb',
NO_COLOR: '1'
},
timeout: 30000
}
);
return stdout;
} catch (error) {
console.error('Claude execution error:', error);
throw error;
}
}// 创建 PTY 时的推荐配置
const pty = spawn(shell, [], {
name: 'xterm-256color',
cols: 120,
rows: 30,
cwd: process.cwd(),
env: {
...process.env,
ANTHROPIC_AUTH_TOKEN: process.env.ANTHROPIC_AUTH_TOKEN,
TERM: 'dumb', // 简化终端模式
NO_COLOR: '1', // 禁用颜色
FORCE_COLOR: '0' // 强制禁用颜色
}
});
// 执行命令时避免交互式输入
pty.write('echo "prompt" | claude -p\r');原因:等待交互式输入 解决:
- 使用
-p参数强制非交互模式 - 使用管道输入而不是直接传递参数
- 设置
TERM=dumb环境变量
原因:终端颜色支持 解决:
- 设置
NO_COLOR=1 - 使用
--no-color参数(如果支持) - 在输出后清理 ANSI 序列
原因:Token 未设置或无效 解决:
- 确保
ANTHROPIC_AUTH_TOKEN环境变量正确设置 - 检查 Token 有效性
- 使用
claude login <token>命令(交互式环境)
原因:安全模式阻止操作 解决:
- 使用
--dangerously-skip-permissions(仅限自动化环境) - 配置适当的
--permission-mode - 使用
--allowedTools明确指定允许的工具
# 检查版本
claude --version
# 更新到最新版本
claude update
# 或通过 npm
npm update -g @anthropic-ai/claude-code-
生产环境:
- 不要使用
--dangerously-skip-permissions - 使用受限的工具集
- 实施适当的权限控制
- 不要使用
-
Token 管理:
- 使用环境变量而不是硬编码
- 定期轮换 Token
- 使用密钥管理服务
-
输入验证:
- 始终转义用户输入
- 限制输入长度
- 验证输入内容
Claude Code CLI 在容器和 Web Terminal 环境中使用时,关键是:
- 使用非交互式模式(
-p参数) - 通过管道传递输入
- 正确配置环境变量
- 处理 PTY 兼容性问题
- 实施适当的错误处理和超时控制
这些实践可以确保 Claude Code 在自动化环境中稳定运行。