You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写Bash交互脚本测试rh-create交互式命令

带方向键选择的CLI脚手架自动化交互实现

针对类vue-cli的交互式脚手架rh-create的流水线自动化测试需求,yes、printf这类管道输入方式无法传递方向键对应的ANSI控制序列,也无法被CLI识别为真实终端环境,可通过以下方案实现全流程自动交互:


首选方案:使用expect实现全键盘模拟

expect是专门为自动化终端交互设计的工具,可模拟所有键盘输入(含方向键、回车、特殊字符),自动挂载伪终端运行目标命令,适配绝大多数交互式CLI场景。

操作步骤

  • 安装依赖:
    • Debian/Ubuntu 环境:apt update && apt install -y expect
    • CentOS/RHEL 环境:yum install -y expect
    • macOS 环境:brew install expect
  • 编写交互脚本,根据rh-create的实际交互流程调整匹配规则和输入序列即可,示例如下:
#!/usr/bin/expect
# 设置全局超时时间(单位:秒),拉取模板、安装依赖耗时较长建议设为300以上
set timeout 300
# 启动目标脚手架命令
spawn rh-create

# 匹配项目名输入提示,输入测试项目名后回车(\r代表回车)
expect "项目名称"
send "rh-test-demo\r"

# 匹配框架/模板选择提示,按2次下方向键选中第3个选项后回车
# 方向键对应ANSI转义序列:上=\033[A 下=\033[B 右=\033[C 左=\033[D
expect "选择模板"
send "\033\[B\033\[B"
send "\r"

# 匹配依赖安装提示,输入y确认
expect "安装依赖"
send "y\r"

# 等待命令执行完成,保留输出到流水线日志
expect eof
  • 给脚本加执行权限后直接在流水线步骤中调用即可:
chmod +x auto_rh_create.exp
./auto_rh_create.exp

适配技术栈的替代方案

如果流水线本身基于特定语言开发,无需额外安装expect,可直接用对应语言的伪终端库实现:

  • Node.js技术栈:使用node-pty库创建伪终端进程,监听输出匹配提示后,写入对应输入内容(方向键同样传入上述ANSI转义序列即可)
  • Python技术栈:使用标准库pty或第三方封装库pexpect,交互逻辑和expect完全一致

避坑提示

  • 禁止用普通管道、重定向方式给脚手架传输入:绝大多数带选择菜单的CLI会检测运行环境是否为真实TTY,非TTY环境会直接退出或跳过交互流程
  • 提示匹配规则只需要匹配关键字即可,不要匹配完整提示文本,避免因提示带颜色转义字符、前后空格导致匹配失败
  • 涉及网络拉取、依赖安装的步骤一定要留足超时时间,避免流程中途被打断

参考交互界面示例:
脚手架交互参考截图


内容的提问来源于stack exchange,提问作者huan feng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 15:09:20