成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

PHP--手摸手,教你擼一個會自動補全的命令行工具1

Chiclaim / 759人閱讀

摘要:前言一次在使用的時候,發(fā)現(xiàn)使用命令行的時候有些關(guān)鍵字會自動提示。介紹隨著,等框架的流行,命令行工具越來越流行,但是很多時候命令太多,根本無法記住所有參數(shù),或者參數(shù)太長輸入太不方便。下文,我們一起來優(yōu)化這個工具。備注不支持自動補全

前言

一次在使用symfony的時候,發(fā)現(xiàn)使用命令行的時候有些關(guān)鍵字會自動提示。

介紹

隨著laravel,symfony等框架的流行,命令行工具越來越流行,但是很多時候命令太多,根本無法記住所有參數(shù),或者參數(shù)太長輸入太不方便。
這時是否也想擁有一個像IDE中的自動補全功能?

手摸手,一起擼一個自動補全工具 獲取命令行字符串

想自動補全,必須獲取命令行輸入的數(shù)據(jù),那么如何獲取數(shù)據(jù)呢?
具體可以參考官方文檔 PHP獲取命令輸入,這里我們使用一種寫法

$c = fread(STDIN, 1);

這樣我們就可以獲取每次輸入的按鍵。

獲取單個字符

進行了上面的操作以后,我們已經(jīng)可以獲取到輸入的內(nèi)容,但是發(fā)現(xiàn)一個問題,我們必須按下回車以后才可以獲取到輸入的內(nèi)容,即使我們設(shè)置了fread最大讀取的長度,那么究竟是什么問題的?
原來Linux終端中,默認是必須按下回車的。那么我們必須關(guān)閉這個功能。為了防止我們使用其他軟件出現(xiàn)問題,我們不需要該功能后需要將其關(guān)閉。

//執(zhí)行如下命令后,就可以一個字符一個字符的獲取了
$sttyMode = shell_exec("stty -g");
shell_exec("stty -icanon -echo");

//恢復原來的狀態(tài)
shell_exec(sprintf("stty %s", $sttyMode));

這時,我們在進行測試

$sttyMode = shell_exec("stty -g");
shell_exec("stty -icanon -echo");
$c = fread(STDIN, 1);
var_dump($c);
shell_exec(sprintf("stty %s", $sttyMode));
簡易自動補全