我在一个perl脚本中执行一个命令,当这个命令完成时,一个问题被发送到STDOUT,请求一个问题的Y或N答案。如果没有给出答案(即我只是结束脚本),那么我们在shell中有一个挂起的进程等待答案。我如何提供所需的Y答案?在perl脚本中执行命令时,perl是否可以响应命令中提出的STDOUT请求?
的perl v5.8.4 的Solaris 10
我在一个perl脚本中执行一个命令,当这个命令完成时,一个问题被发送到STDOUT,请求一个问题的Y或N答案。如果没有给出答案(即我只是结束脚本),那么我们在shell中有一个挂起的进程等待答案。我如何提供所需的Y答案?在perl脚本中执行命令时,perl是否可以响应命令中提出的STDOUT请求?
的perl v5.8.4 的Solaris 10
最简单的:
使用shell的重定向 “Y” 到命令的标准输入能力:
`echo "Y" | your_command_expecting_Y`;
或(略差,但更灵活)。
`your_command_expecting_Y < /my/file/containing/one/line/with_Y_in_it.txt`;
更复杂,但无限更灵活和Perl本地:
使用Expect
模块
use Expect;
# create an Expect object by spawning another process
my $exp = Expect->spawn($command, @params);
$exp->send("Y\n");
假设你总要回答“Y”和该命令将只提示一次:
system("echo Y | your_command_here");
如果该命令会提示不止一次,你总是要回答“Y”:
system("yes Y | your_command_here");
否则,Expect
可能是你最好的选择,因为其他人有建议。
+1“是” - 非常酷! – DVK
注意:脚本内部的命令提出了问题,而不是perl脚本。那么将答案发送到命令执行的shell的方法是什么? –