Skip to content

Copilot CLI 的 -p 参数让你在不打开交互界面的情况下直接执行 AI 任务,适合嵌入 Shell 脚本或批量自动化。一行命令、一个脚本,就能把 AI 能力集成到任何工作流中。

GitHub Copilot CLI 脚本化快速入门:在脚本中调用 AI

最简单的用法

直接在终端跑一个 AI 任务,不打开交互界面:

bash
copilot -p "总结这个文件的功能:./README.md"

-p 参数让 Copilot CLI 跳过交互界面,直接执行任务并输出结果。

在 Shell 脚本中使用

示例:扫描大文件并用 AI 生成描述报告

bash
#!/bin/bash
# 找出所有超过 10MB 的文件,用 Copilot CLI 生成描述,汇总发送邮件

EMAIL_TO="team@example.com"
SUBJECT="大文件清单"
BODY=""

while IFS= read -r -d '' file; do
    size=$(du -h "$file" | cut -f1)
    # 调用 Copilot CLI 对每个文件生成简短描述
    description=$(copilot -p "用一句话描述这个文件的用途:$file" -s 2>/dev/null)
    BODY+="文件:$file"$'\n'"大小:$size"$'\n'"描述:$description"$'\n\n'
done < <(find . -type f -size +10M -print0)

if [ -z "$BODY" ]; then
    echo "未找到超过 10MB 的文件。"
    exit 0
fi

echo -e "To: $EMAIL_TO\nSubject: $SUBJECT\n\n$BODY" | sendmail "$EMAIL_TO"
echo "邮件已发送到 $EMAIL_TO"

运行方式:

bash
chmod +x scan_large_files.sh
./scan_large_files.sh

常用参数组合

bash
# 基础:无交互执行
copilot -p "你的任务描述"

# 静默模式(只输出最终结果,不显示过程)
copilot -p "你的任务描述" -s

# 预授权工具(避免运行中断等待确认)
copilot -p "分析 git 历史" --allow-tool='shell(git:*)' --no-ask-user

# 允许读写文件
copilot -p "生成报告到 report.md" --allow-tool=read --allow-tool=write --no-ask-user

捕获输出

Copilot CLI 的输出写到标准输出,可以用常规 Shell 方式捕获:

bash
# 赋值给变量
result=$(copilot -p "分析这段代码的复杂度" -s)
echo "分析结果:$result"

# 写入文件
copilot -p "生成项目摘要" -s > project-summary.md

# 追加到文件
copilot -p "今日变更摘要" -s >> changelog.md

定时任务(cron)

bash
# 每天早上 9 点自动生成昨日提交摘要
0 9 * * * cd /your/project && copilot -p "生成昨天的 git 提交摘要" --allow-tool='shell(git:*)' --allow-tool=write --no-ask-user > /tmp/daily-summary.md

常见问题

Q: 脚本运行时 Copilot CLI 提示需要登录怎么办?

A: 脚本环境中使用 COPILOT_GITHUB_TOKEN 环境变量认证:

bash
export COPILOT_GITHUB_TOKEN="your-token-here"
copilot -p "你的任务"

在 CI/CD 环境中把 token 存到 secrets 而不是明文写在脚本里。

Q: -s 参数是什么意思?

A: -s 是静默模式(silent),只输出最终结果,过滤掉 Copilot 的过程输出(思考步骤、工具调用日志等)。在脚本中捕获输出时推荐加上 -s,否则变量里会混入大量中间信息。

Q: 如何控制 Copilot 最多消耗多少轮次?

A: 用 --max-autopilot-continues N 限制最大自动继续轮次,防止单个任务消耗过多 AI Credits:

bash
copilot -p "修复所有 lint 错误" --autopilot --yolo --max-autopilot-continues 5 --no-ask-user