commit all archived files
This commit is contained in:
parent
9d1ee94391
commit
4dcba48c8c
18
README.md
Normal file
18
README.md
Normal file
@ -0,0 +1,18 @@
|
||||
# mini-expect
|
||||
|
||||
![](https://img.shields.io/badge/written%20in-bash-blue)
|
||||
|
||||
An expect(1) clone that doesn't corrupt CR bytes.
|
||||
|
||||
I recently attempted to use expect(1) as part of a test suite, but it seems totally incapable of sending 0x13 bytes without corrupting them into 0x10. Maybe it was my terminal mode (but `echo $'\r' | nc` was fine), maybe it was my expect/tcl installation (but the bug was observed on current packages from both Cygwin and Debian), maybe it was easier to reimplement the basic functionality instead of spending any more time on that.
|
||||
|
||||
## Usage
|
||||
|
||||
`source mini-expect.sh`
|
||||
|
||||
Then, use spawn/send/expect/interact commands just like with expect(1).
|
||||
|
||||
|
||||
## Download
|
||||
|
||||
- [⬇️ mini-expect.v1.sh](dist-archive/mini-expect.v1.sh) *(474B)*
|
37
dist-archive/mini-expect.v1.sh
Normal file
37
dist-archive/mini-expect.v1.sh
Normal file
@ -0,0 +1,37 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Mini expect(1) clone that doesn't mangle \r into \n.
|
||||
#
|
||||
|
||||
EXPECT_IN=0
|
||||
EXPECT_OUT=1
|
||||
|
||||
spawn() {
|
||||
coproc "$@"
|
||||
EXPECT_IN=${COPROC[0]}
|
||||
EXPECT_OUT=${COPROC[1]}
|
||||
}
|
||||
|
||||
expect() {
|
||||
local expect_str="$1"
|
||||
while read -r line <&${EXPECT_IN} ; do
|
||||
echo "$line"
|
||||
if [[ $line =~ $expect_str ]] ; then
|
||||
return
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
send() {
|
||||
echo -n "$@"
|
||||
echo -n "$@" >&${EXPECT_OUT}
|
||||
}
|
||||
|
||||
send_pipe() {
|
||||
local buffer="$(cat)"
|
||||
send "$buffer"
|
||||
}
|
||||
|
||||
interact() {
|
||||
cat >&${EXPECT_OUT}
|
||||
}
|
Reference in New Issue
Block a user