摘要:前言一次在使用的時(shí)候,發(fā)現(xiàn)使用命令行的時(shí)候有些關(guān)鍵字會(huì)自動(dòng)提示。介紹隨著,等框架的流行,命令行工具越來(lái)越流行,但是很多時(shí)候命令太多,根本無(wú)法記住所有參數(shù),或者參數(shù)太長(zhǎng)輸入太不方便。下文,我們一起來(lái)優(yōu)化這個(gè)工具。備注不支持自動(dòng)補(bǔ)全
前言
一次在使用symfony的時(shí)候,發(fā)現(xiàn)使用命令行的時(shí)候有些關(guān)鍵字會(huì)自動(dòng)提示。
介紹隨著laravel,symfony等框架的流行,命令行工具越來(lái)越流行,但是很多時(shí)候命令太多,根本無(wú)法記住所有參數(shù),或者參數(shù)太長(zhǎng)輸入太不方便。
這時(shí)是否也想擁有一個(gè)像IDE中的自動(dòng)補(bǔ)全功能?
想自動(dòng)補(bǔ)全,必須獲取命令行輸入的數(shù)據(jù),那么如何獲取數(shù)據(jù)呢?
具體可以參考官方文檔 PHP獲取命令輸入,這里我們使用一種寫(xiě)法
$c = fread(STDIN, 1);
這樣我們就可以獲取每次輸入的按鍵。
獲取單個(gè)字符進(jìn)行了上面的操作以后,我們已經(jīng)可以獲取到輸入的內(nèi)容,但是發(fā)現(xiàn)一個(gè)問(wèn)題,我們必須按下回車以后才可以獲取到輸入的內(nèi)容,即使我們?cè)O(shè)置了fread最大讀取的長(zhǎng)度,那么究竟是什么問(wèn)題的?
原來(lái)Linux終端中,默認(rèn)是必須按下回車的。那么我們必須關(guān)閉這個(gè)功能。為了防止我們使用其他軟件出現(xiàn)問(wèn)題,我們不需要該功能后需要將其關(guān)閉。
//執(zhí)行如下命令后,就可以一個(gè)字符一個(gè)字符的獲取了 $sttyMode = shell_exec("stty -g"); shell_exec("stty -icanon -echo"); //恢復(fù)原來(lái)的狀態(tài) shell_exec(sprintf("stty %s", $sttyMode));
這時(shí),我們?cè)谶M(jìn)行測(cè)試
$sttyMode = shell_exec("stty -g"); shell_exec("stty -icanon -echo"); $c = fread(STDIN, 1); var_dump($c); shell_exec(sprintf("stty %s", $sttyMode));簡(jiǎn)易自動(dòng)補(bǔ)全