1. 程式人生 > >Mac 終端小工具開發( 簡單入門)

Mac 終端小工具開發( 簡單入門)

一、準備

建立一個 Mac 終端專案,命名為 HGTools,看起來是這樣的:

image.png

直接 command+b 之後從這裡 Show in Finder :

image.png

開啟終端,執行如下:

image.png

一個 Mac 終端專案的建立到執行的過程介紹完畢,接下來是如何在程式碼中獲取外部輸入的引數

二、引數

開發一個終端的程式,我們比較關注是的輸入與輸出。

引數的接收,主要來源於 main 函式的引數:

image.png

argc:代表引數的個數。

argv:引數陣列。

簡單的寫幾行程式碼檢視一下參具體的值:

printf(“\n”);

for (int i=0; i    const char* arg = argv[i];
    printf(” argv[%d] %s\n”, i, arg);
}

printf(“\n”);

實驗一下,結果如下:

image.png

結論:

  1. 第一個引數就是當前可執行檔案的名。

  2. 其它引數以空格作為分隔符。

還有一種引數的傳入,是帶有關鍵字 grep 的:

image.png

發現加上 grep 之後,引數列印不見了。不知道是否有小夥伴知道這是為什麼?接下來換一種方式:

image.png

這裡有一個問題要說清楚:在我們的工具開發中,./HGTools -l | grep love 這樣帶有 grep 的部分不是由我們負責的, grep 本來就是一個系統的指令。在 ./HGTools -l | grep love 指令中,其實是有兩個部分組成:./HGTools -l 與 grep love 這兩個指令是連貫的,後面的指令會過濾掉第一個指令中的結果。所以才會出現 grep 後面是 love 的時候沒有任何列印,而是 HGTools 的時候,把帶有 HGTools 的那一行顯示出來了。

其實在平常使用終端的過程中經常使用這樣的指令:

history | grep Tools

意思是列印我們在終端輸入過的帶有 Tools 字樣的指令。

三、小功能實戰

具體的功能為:搜尋桌面的所有檔案

這個功能僅僅是一個例子而已,沒有實際的意義。

3.1 簡單實現瀏覽

幫組提示:

image.png

列出所有的檔案:

image.png

列出所有的目錄:

image.png

列出所有的目錄與檔案:

image.png

手動模擬的一個 grep 功能:

image.png

系統的 grep 功能,這個功能是系統自帶的:

image.png

四、程式碼

程式碼在這裡:HGTools 。

五、許可權

如果是做 iPhone 的終端工具開發,會出現一個可執行程式的許可權不夠用的情況,這個時候需要考慮新增許可權。一般的做法是獲取一個程式比較大的許可權檔案,然後再把這個大許可權的檔案給當前的程式。

獲取許可權的命令:

ldid -e SpringBoard > SpringBoard.entitlements

重新賦值許可權的方法:

ldid -SSpringBoard.entitlements HGTools

這樣 HGTools 就能擁有與 SpringBoard 一樣高的許可權。

作者:CoderHG