4 个版本 (破坏性更新)
0.6.0 | 2024年2月24日 |
---|---|
0.5.0 | 2024年2月24日 |
0.4.0 | 2024年2月23日 |
0.3.0 | 2024年2月22日 |
#3 in #asciinema
47KB
1K SLoC
Anticipate
支持 asciinema 的基于脚本的自动化,类似于 expect(1)
。
非常适合演示和测试命令行界面。
安装
cargo install anticipate-cli
示例
创建一个目录,初始化服务器配置,打印配置文件,启动服务器,然后发送 SIGTERM 命令来关闭它。
mkdir -p target/server/accounts
#$ readline
server init target/config.toml --path server/accounts
#$ readline
cat target/config.toml
#$ expect path = "server/accounts"
server start target/config.toml
#$ sendcontrol ^C
查看 examples
和 fixtures
文件夹以获取更多示例。
用法
运行
要执行脚本,请使用 run
命令
anticipate \
run \
--parallel \
--log \
tests/examples/*.sh
录制
要使用 asciinema 录制,为每个输入文件在 target
目录中写入一个 .cast
文件,覆盖任何现有文件
anticipate \
record \
--parallel \
--overwrite \
--log \
target \
tests/examples/*.sh
查看程序帮助以获取更多选项。
语法
- pragma -
#!/bin/bash
- sendline -
#$ sendline ls -la
- sendcontrol -
#$ sendcontrol ^C
- expect -
#$ expect Documents
- regex -
#$ regex [0-9]
- readline -
#$ readline
- sleep -
#$ sleep 500
- send -
#$ send echo
- flush -
#$ flush
- 等待 -
#$ wait
- 清除 -
#$ clear
- 包含 -
#$ include ../shared.sh
环境变量会在发送到伪终端的命令中进行替换,这使得在脚本间共享值变得更加容易。
export NAME=foo
anticipate rec -o target tests/examples/interpolate.sh
asciinema play target/interpolate.cast
预处理指令
使用预处理指令作为第一条指令来设置要执行的命令
#!/bin/bash
如果给定的是相对路径,则相对于脚本解析
#!../programs/script.sh
发送行
将原始文本作为一行发送到伪终端
ls -la
或者您可以使用sendline命令显式地发送
#$ sendline ls -la
发送控制字符
要发送控制字符,例如Ctrl+C
#$ sendcontrol ^C
期望
Expect等待字符串出现在程序输出中
#$ expect Documents
正则表达式
要等待模式出现在程序输出中,请使用regex
#$ regex [0-9]
读取行
读取程序输出的一行
#$ readline
睡眠
等待指定毫秒数
#$ sleep 500
发送
发送文本到程序而不刷新流
#$ send echo
刷新
刷新发送到伪终端的缓冲区
#$ flush
等待
等待提示符出现
#$ wait
清除
清除屏幕并重置光标位置
#$ clear
包含
包含脚本文件中的指令
#$ include ../shared.sh
路径相对于脚本文件的父目录解析。
参见
- Autocast 如果您更喜欢YAML语法
- Asciinema Integrations 其他asciinema工具
致谢
core 模块是 expectrl 的分支,语法受到 asciinema-automation 的启发。
许可
MIT或Apache-2.0
依赖
~13–46MB
~658K SLoC