是否可以使用php exec并回答脚本中的问题?

时间:2012-11-29 18:43:40

标签: php linux exec

想象一下,我的服务器上有一个script.sh,询问你的名字。你运行脚本,然后说:

what is your name?

然后输入你的名字并打印出来:

hello name! 

是否可以使用php exec运行这样的脚本?那是执行脚本并以某种方式回答它可能有的不同问题?

希望我很清楚。我真正想要做的是从我们的开发服务器自动执行“git pull”命令,但它一直要求输入用户名/密码。我知道我可以使用ssh证书登录来避免这种情况,但我的问题仍然存在。我可以使用exec()并回答脚本中的未来问题。

3 个答案:

答案 0 :(得分:3)

值得注意的是,在您的情况下,更好的解决方案是使用SSH密钥进行身份验证。但是,你可以用PHP Expect来解决这个问题。

ini_set("expect.timeout", -1);
ini_set("expect.loguser", "Off");

$stream = expect_popen("git pull");

while (true) {
    switch (expect_expectl ($stream, array (
            array ("username:", USERNAME),
            array ("password:", PASSWORD),
    ))) {
        case USERNAME:
            fwrite ($stream, "usename\n");
            break;
        case PASSWORD:
            fwrite ($stream, "secret\n");
            break;

        case EXP_TIMEOUT:
        case EXP_EOF:
            break 2;

        default:
            die ("Error has occurred!\n");
    }
}

fclose ($stream);

答案 1 :(得分:0)

对于你的问题:如果你真的知道要求使用管道的话,你可以做的一件事     exec(“echo'hello world'| some_command”) 如果您需要更复杂的交互,请查看popen()。 popen为您提供了对进程的流访问,因此您可以使用fread / fwrite等 但是这些对您的情况不起作用,因为大多数ssh实现使用特殊API检查交互式输入。你可以做的就是使用密钥或查看ssh-agent。

答案 2 :(得分:0)

当您使用php执行命令时,该命令要求您回答单个问题以完成该过程。

回应'回答' |命令

如果您需要回答多个问题,可以访问以下链接:PHP execute command and answering questions for command