我正在编写一个自动与另一个脚本交互的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并且无法再对它做任何事情。
我做错分析了吗?或者有任何功能正在做我想要的吗?
答案 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'); }
我希望,这个脚本对你没用。