我試圖安裝一個應用程序使用phpseclib(使用apt-get)並且想要處理不同的輸出結果我可以接收...但是我不確定如何讓它工作。目前,我有以下幾點:
$first = $ssh->read('[email protected]:~#');
$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('[email protected]:~#')){
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('[email protected]:~#');
echo "<pre>$continue_end</pre>";
echo str_repeat(' ',1024*64);
}
此,如果僅環與作品的第一個「如果」 ......也就是說,如果有意外的輸出(你回去的外殼,而不問「要不要繼續「,這意味着已經安裝等),那麼這個腳本將工作得很好。
但是,如果應用程序未安裝,它將永遠不會去elseif循環。我很確定原因是因爲第一個ssh-> read會持續到php超時,等待這個結果......我該如何編寫它,以便它將同時查看這兩個選項,並選擇正確的選項。
我想使用CASE這一點,但我不知道該怎麼寫......
也有可能是一個更好的方式來做到這一點使用phpseclib ...但不知道該怎麼做。
謝謝!
哦,好吧,我必須承認我不知道這個選項......我會用它,雖然我希望有一種方法可以使用CASE語句,所以我可以搜索「emacs已經是最新版本「或」包未找到「等,所以用戶可以得到一個確切的錯誤味精,但這解決了我的直接問題,謝謝。 – deranjer
如果你使用我的方法,你可以使用$ ssh-> exec和grep輸出的文本作爲最新版本 – jpiasetz
哦,太棒了!這很有幫助,我剛剛使用stristr來搜索$ ssh-> exec輸出......效果很好,謝謝。 – deranjer