我正在尝试使用 phpseclib(使用 apt-get)安装应用程序,并希望处理我可能收到的不同输出结果......但是我不确定如何让它工作。我目前有以下内容:
$first = $ssh->read('root@DMZ-Server:~#');
$ssh->write("sudo apt-get install emacs\n");
echo "<br />";
echo "sudo apt-get install emacs";
echo str_repeat(' ',1024*64);
if ($unexpected_output = $ssh->read('root@DMZ-Server:~#')){
echo "<pre>$unexpected_output</pre>";
echo str_repeat(' ',1024*64);
} elseif ($continue = $ssh->read('Do you want to continue [Y/n]?')){
echo "<pre>$continue</pre>";
echo str_repeat(' ',1024*64);
$ssh->write("Y\n");
$continue_end = $ssh->read('root@DMZ-Server:~#');
echo "<pre>$continue_end</pre>";
echo str_repeat(' ',1024*64);
}
这个 if 循环只适用于第一个“if”......也就是说,如果有意外的输出(你回到 shell 没有被问到“你想继续”,这意味着已经安装等)那么这个脚本将工作得很好。
但是如果应用程序没有安装,它永远不会进入 elseif 循环。我很确定原因是因为第一个 ssh->read 将继续,直到 php 超时,等待结果......我如何编写它以便它同时查看两个选项,并选择正确的一个。
我正在考虑为此使用 CASE,但不知道如何写...
使用 phpseclib 也可能有更好的方法来做到这一点......但不知道如何做到这一点。
谢谢!