4 releases (breaking)
0.6.0 | Feb 24, 2024 |
---|---|
0.5.0 | Feb 24, 2024 |
0.4.0 | Feb 23, 2024 |
0.3.0 | Feb 22, 2024 |
#329 in Command line utilities
93 downloads per month
47KB
1K
SLoC
Anticipate
Script based automation like expect(1)
with support for asciinema.
Perfect for demos and testing command line interfaces.
Install
cargo install anticipate-cli
Example
Create a directory, initialize a server config, print the config file, start the server and then send SIGTERM to shut it down.
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
See the examples
and fixtures
folders for more examples.
Usage
Running
To execute scripts use the run
command:
anticipate \
run \
--parallel \
--log \
tests/examples/*.sh
Recording
To record using asciinema writing a .cast
file for each input file into the target
directory overwriting any existing files:
anticipate \
record \
--parallel \
--overwrite \
--log \
target \
tests/examples/*.sh
See the progam help for more options.
Syntax
- 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 -
#$ wait
- clear -
#$ clear
- include -
#$ include ../shared.sh
Environment variables are interpolated for commands sent to the pseudo terminal which makes it easier to share values across scripts.
export NAME=foo
anticipate rec -o target tests/examples/interpolate.sh
asciinema play target/interpolate.cast
Pragma
Use a pragma as the first instruction to set the command to execute:
#!/bin/bash
If a relative path is given it is resolved relative to the script:
#!../programs/script.sh
Send Line
Raw text is sent as a line to the pseudo-terminal:
ls -la
Or you can use the sendline command explicitly:
#$ sendline ls -la
Send Control
To send a control character, for example Ctrl+C:
#$ sendcontrol ^C
Expect
Expect waits for a string to appear in the program output:
#$ expect Documents
Regex
To wait for a pattern to appear in the program output use regex
:
#$ regex [0-9]
Read Line
Read a line of program output:
#$ readline
Sleep
Wait for a number of milliseconds:
#$ sleep 500
Send
Send text to the program without flushing the stream:
#$ send echo
Flush
Flush the buffer being sent to the pseudo-terminal:
#$ flush
Wait
Wait for the prompt to appear:
#$ wait
Clear
Clear the screen and reset the cursor position:
#$ clear
Include
Include instructions from a script file:
#$ include ../shared.sh
Paths are resolved relative to the parent directory of the script file.
See Also
- Autocast if you prefer a YAML syntax
- Asciinema Integrations for other asciinema tools
Credits
The core module is a fork of expectrl and the syntax is inspired by asciinema-automation.
License
MIT or Apache-2.0
Dependencies
~13–45MB
~684K SLoC