我有一個PHP CLI腳本並希望從該腳本執行交互式bash命令(例如less huge-file.txt
),並獲得相同的視圖(例如導航控件less
),就像我一樣直接從終端開始。在CLI模式下從PHP運行交互式shell命令
正常system()
調用,因爲他們不暫停,只是返回所有的輸出一次(在例如less
的情況下)是不夠的。
感覺是我有一個CLI腳本來組織幾個任務。其中一些使用複雜的bash命令,我只是想從PHP調用bash腳本,但獲得原始終端行爲。
我有一個PHP CLI腳本並希望從該腳本執行交互式bash命令(例如less huge-file.txt
),並獲得相同的視圖(例如導航控件less
),就像我一樣直接從終端開始。在CLI模式下從PHP運行交互式shell命令
正常system()
調用,因爲他們不暫停,只是返回所有的輸出一次(在例如less
的情況下)是不夠的。
感覺是我有一個CLI腳本來組織幾個任務。其中一些使用複雜的bash命令,我只是想從PHP調用bash腳本,但獲得原始終端行爲。
是的,這是可能的。我最近發佈了一個項目,該項目允許PHP獲得並與真正的Bash shell進行交互。在這裏得到它:https://github.com/merlinthemagic/MTS
我懷疑你真的很少使用腳本(這將變得醜陋,頭/尾/ sed/awk是你的朋友在文本操作),但獲得真正的shell行爲是非常可能的。
$shell = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', false);
//open file in less. $return1 will contain the view and the first part of the file you opened. The second argument is needed to delimit the return since less will not end in a shell prompt.
$return1 = $shell->exeCmd('less /path/to/huge-file.txt', 'huge-file.txt');
//quit less, you must do this or the shell will hang on the less prompt and will have to be forcefully terminated.
$return2 = $shell->exeCmd('q');
說的真好:
下載您只需使用下面的代碼之後。祝你好運(即使這是不可能的,除非你在cli模式下運行PHP)...你有編程問題嗎?這個網站是爲了問題,而不是轉儲您的待辦事項/需求清單的地方。 –
@MarcB我認爲更一般的問題更好?我正在努力尋找一個好的和短期的解決方案,所以我認爲我會很高興分享我的發現,並要求更好的? – flori
@thatotherguy我有一個CLI腳本,不需要任何Web訪問。我重新提出了這個問題,以使其更加清晰。 – flori