Mac 終端小工具開發( 簡單入門)
一、準備
建立一個 Mac 終端專案,命名為 HGTools,看起來是這樣的:
直接 command+b 之後從這裡 Show in Finder :
開啟終端,執行如下:
一個 Mac 終端專案的建立到執行的過程介紹完畢,接下來是如何在程式碼中獲取外部輸入的引數。
二、引數
開發一個終端的程式,我們比較關注是的輸入與輸出。
引數的接收,主要來源於 main 函式的引數:
argc:代表引數的個數。
argv:引數陣列。
簡單的寫幾行程式碼檢視一下參具體的值:
printf(“\n”);
for (int i=0; i const char* arg = argv[i];
printf(” argv[%d] %s\n”, i, arg);
}printf(“\n”);
實驗一下,結果如下:
結論:
-
第一個引數就是當前可執行檔案的名。
-
其它引數以空格作為分隔符。
還有一種引數的傳入,是帶有關鍵字 grep 的:
發現加上 grep 之後,引數列印不見了。不知道是否有小夥伴知道這是為什麼?接下來換一種方式:
這裡有一個問題要說清楚:在我們的工具開發中,./HGTools -l | grep love 這樣帶有 grep 的部分不是由我們負責的, grep 本來就是一個系統的指令。在 ./HGTools -l | grep love 指令中,其實是有兩個部分組成:./HGTools -l 與 grep love 這兩個指令是連貫的,後面的指令會過濾掉第一個指令中的結果。所以才會出現 grep 後面是 love 的時候沒有任何列印,而是 HGTools 的時候,把帶有 HGTools 的那一行顯示出來了。
其實在平常使用終端的過程中經常使用這樣的指令:
history | grep Tools
意思是列印我們在終端輸入過的帶有 Tools 字樣的指令。
三、小功能實戰
具體的功能為:搜尋桌面的所有檔案。
這個功能僅僅是一個例子而已,沒有實際的意義。
3.1 簡單實現瀏覽
幫組提示:
列出所有的檔案:
列出所有的目錄:
列出所有的目錄與檔案:
手動模擬的一個 grep 功能:
系統的 grep 功能,這個功能是系統自帶的:
四、程式碼
程式碼在這裡:HGTools 。
五、許可權
如果是做 iPhone 的終端工具開發,會出現一個可執行程式的許可權不夠用的情況,這個時候需要考慮新增許可權。一般的做法是獲取一個程式比較大的許可權檔案,然後再把這個大許可權的檔案給當前的程式。
獲取許可權的命令:
ldid -e SpringBoard > SpringBoard.entitlements
重新賦值許可權的方法:
ldid -SSpringBoard.entitlements HGTools
這樣 HGTools 就能擁有與 SpringBoard 一樣高的許可權。
作者:CoderHG