如何用Perl做“等待和回答系统”

时间:2015-04-17 04:00:41

标签: perl shell

我正在编写一个自动与另一个脚本交互的Perl 对于某些关键操作,脚本需要双重确认。

在没有Perl的情况下执行脚本如下所示:

$ ./TheScript
TheScript Starting.......
Following step might be harmful to your system.
Are You Sure (Y/N)?
$ Y
TheScript finished!

现在我想要一个Perl脚本为我做这个。 我确信(Y / N)确认将在10秒内存在。所以我试过了:

system('./TheScript');
sleep 10;
system('Y');

这失败了,因为它卡在系统中('。/ TheScript')而没有  转到脚本的其余部分,包括回复'Y'。

Backstick`几乎与系统相同,只是它捕获了STDOUT exec()更不可能,因为它会分叉TheScript并且无法再对它做任何事情。

我做错分析了吗?或者有任何功能正在做我想要的吗?

2 个答案:

答案 0 :(得分:2)

你误解了system功能。等待程序在Perl程序继续之前退出。

要从Perl驱动交互式程序,您需要Expect模块(或者Expect::Simple)。但是,对于一个像你建议的非常简单的情况,IPC::Open2可能就足够了,而且它是一个核心模块。

答案 1 :(得分:0)

根据您编写的Perl脚本,您在系统发生双重确认时遇到问题。所以我可以建议,你可以用这样的方式编写脚本,

首先检查第一次确认OK 如果再次询问确认,您的脚本也必须检查第二次确认

为此,

我的$ conf =“你确定(是/否)?”;我的$ length = $ conf; if($ length> 0){sleep 0;系统( 'Y'); } else {system('N'); }

我希望,这个脚本对你没用。