当在 perl 脚本中执行命令时,perl 可以响应命令中提出的 STDOUT 请求吗?

发布于 2024-12-11 12:15:28 字数 157 浏览 0 评论 0原文

我正在 perl 脚本内执行一个命令,当该命令完成时,会向 STDOUT 发送一个问题,请求对问题给出 Y 或 N 答案。如果没有给出答案(即我只是结束脚本),那么我们的 shell 中有一个挂起的进程等待答案。我怎样才能提供所需的 Y 答案?

Perl v5.8.4 索拉里斯10

I'm executing a command inside a perl script and when that command completes, a question is sent to STDOUT requesting a Y or N answer to a question. If no answer is given (i.e. I just end the script) then we have a hung process in the shell waiting for an answer. How can I supply the desired Y answer?

perl v5.8.4
solaris 10

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

咆哮 2024-12-18 12:15:28
  • 最简单

    使用 shell 的能力将“Y”重定向到命令的 STDIN:

    `回显“Y”| your_command_expecting_Y`;
    

    或者(稍差但更灵活)。

    `your_command_expecting_Y < /我的/文件/包含/一个/行/with_Y_in_it.txt`; 
    
  • 更复杂但无限灵活且 Perl 原生:

    使用Expect模块

    使用Expect;
    # 通过生成另一个进程来创建 Expect 对象
    我的 $exp = Expect->spawn($command, @params);
    $exp->send("Y\n");
    
  • Simplest:

    Use shell's ability to redirect "Y" into command's STDIN:

    `echo "Y" | your_command_expecting_Y`;
    

    or (slightly worse but more flexible).

    `your_command_expecting_Y < /my/file/containing/one/line/with_Y_in_it.txt`; 
    
  • More complicated but infinitely more flexible and Perl native:

    Use Expect module

    use Expect;
    # create an Expect object by spawning another process
    my $exp = Expect->spawn($command, @params);
    $exp->send("Y\n");
    
夜夜流光相皎洁 2024-12-18 12:15:28

假设您总是想要回答“Y”并且该命令只会提示一次

system("echo Y | your_command_here");

如果命令将提示多次并且您总是想要回答“Y”:

system("yes Y | your_command_here");

否则,正如其他人所建议的那样,Expect可能是您的最佳选择。

Assuming you always want to answer 'Y' and the command will only prompt once:

system("echo Y | your_command_here");

If the command will prompt more than once and you always want to answer 'Y':

system("yes Y | your_command_here");

Otherwise, Expect is probably your best bet as the others have suggestes.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文