Linux shell: 我的 `expect` 脚本没有按预期工作
Linux shell: my `expect` script doesn't work as expected
我有一个如下所示的简单脚本,从命令行读取 2 个数字并将它们相加:
$cat runexp.sh
#!/bin/bash
echo "read 1st number"
read n1
echo "read 2nd number"
read n2
expr $n1 + $n2
运行正常,没问题。然后我写了一个如下的期望脚本:
$cat autorun.sh
#!/usr/bin/expect
spawn ./runexp.sh
expect 'read 1st number' {send "1"}
expect 'read 2nd number' {send "2"}
interact
好像还是提示从命令行读取,过了好久才结束
$./autorun.sh
spawn ./runexp.sh
read 1st number
5
4
3
5
4
3
read 2nd number
9
我哪里错了?
谢谢。
你也必须发送换行符,否则它只会等待(至少直到默认超时,我认为是十秒)。
此外,expect
不喜欢用单引号括住字符串。就像 Tcl(从哪里来的)一样,它需要双引号或大括号。这很好用:
#!/usr/bin/expect
spawn ./runexp.sh
expect "read 1st number" {send "1\n"}
expect {read 2nd number} {send "2\n"}
interact
我有一个如下所示的简单脚本,从命令行读取 2 个数字并将它们相加:
$cat runexp.sh
#!/bin/bash
echo "read 1st number"
read n1
echo "read 2nd number"
read n2
expr $n1 + $n2
运行正常,没问题。然后我写了一个如下的期望脚本:
$cat autorun.sh
#!/usr/bin/expect
spawn ./runexp.sh
expect 'read 1st number' {send "1"}
expect 'read 2nd number' {send "2"}
interact
好像还是提示从命令行读取,过了好久才结束
$./autorun.sh
spawn ./runexp.sh
read 1st number
5
4
3
5
4
3
read 2nd number
9
我哪里错了? 谢谢。
你也必须发送换行符,否则它只会等待(至少直到默认超时,我认为是十秒)。
此外,expect
不喜欢用单引号括住字符串。就像 Tcl(从哪里来的)一样,它需要双引号或大括号。这很好用:
#!/usr/bin/expect
spawn ./runexp.sh
expect "read 1st number" {send "1\n"}
expect {read 2nd number} {send "2\n"}
interact