2011-10-21 42 views
1

我在一个perl脚本中执行一个命令,当这个命令完成时,一个问题被发送到STDOUT,请求一个问题的Y或N答案。如果没有给出答案(即我只是结束脚本),那么我们在shell中有一个挂起的进程等待答案。我如何提供所需的Y答案?在perl脚本中执行命令时,perl是否可以响应命令中提出的STDOUT请求?

的perl v5.8.4 的Solaris 10

+0

注意:脚本内部的命令提出了问题,而不是perl脚本。那么将答案发送到命令执行的shell的方法是什么? –

回答

8
  • 最简单的

    使用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"); 
    
3

假设你要回答“Y”和该命令将只提示一次

system("echo Y | your_command_here"); 

如果该命令会提示不止一次,你总是要回答“Y”:

system("yes Y | your_command_here"); 

否则,Expect可能是你最好的选择,因为其他人有建议。

+0

+1“是” - 非常酷! – DVK