我有一个期望脚本执行以下操作:
Spawns a.sh - > a.sh等待用户输入
Spawns b.sh - >跑步和完成
我现在想要向a.sh发送输入但是难以使其正常工作。
以下是我的预期脚本
#!/usr/bin/expect
spawn "./a.sh"
set a $spawn_id
expect "enter"
spawn "./b.sh"
expect eof
send -i $a "test\r"
a.sh是
read -p "enter " group
echo $group
echo $group to file > file.txt
和b.sh是
echo i am b
sleep 5
echo xx
答案 0 :(得分:1)
基本上,expect
将使用两个可行的命令,例如send
和expect
。在这种情况下,如果使用send
,则必须在之后拥有expect
(在大多数情况下)。 (反之亦然,不要求是强制性的)
这是因为没有它我们将错过生成过程中发生的事情,因为expect
将假设您只需要发送一个字符串值而不期望会话中的任何其他内容。
以下代码
send "ian\n"
我们必须让expect
等待事情发生。您已使用expect eof
来生成进程a.sh
。同样,它也可以为b.sh
衍生过程添加。
“那么,为什么interact
有效?”我听说过你
它们都以相同的方式工作,除了interact
期望来自用户的一些输入作为交互式会话。它显然希望你。但是,您当前的shell脚本不是为获取输入而设计的,它最终会退出,因为脚本中没有更多的代码,这就是您看到正确输出的原因。或者,即使单独使用expect
代码(即使没有eof
)也可以做到这一点。
查看expect's man page了解更多信息。
答案 1 :(得分:0)
我刚刚使用
工作了spawn "./a.sh"
set a $spawn_id
expect "enter"
spawn "./b.sh"
expect eof
set spawn_id $a
send "ian\n"
interact
我现在的问题是为什么你最后需要互动?