想象一下,我的服务器上有一个script.sh,询问你的名字。你运行脚本,然后说:
what is your name?
然后输入你的名字并打印出来:
hello name!
是否可以使用php exec运行这样的脚本?那是执行脚本并以某种方式回答它可能有的不同问题?
希望我很清楚。我真正想要做的是从我们的开发服务器自动执行“git pull”命令,但它一直要求输入用户名/密码。我知道我可以使用ssh证书登录来避免这种情况,但我的问题仍然存在。我可以使用exec()并回答脚本中的未来问题。答案 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