前提
工作中我們經常遇到很多重複的事情,例如最近我就遇到一個,在debug的時候需要經常到專案裡面的logs
資料夾下面檢視日誌,基於這個前提再加上想把之前看linux
的一些知識應用一下,寫了一個命令,效率倍感提升。
指令碼超連結: github
什麼是Shell
雖說這個不需要解釋了,但是這裡還是要佔個位,以便不知道的人,通過這個標題去 baidu
google
查詢自己需要的知識
囉嗦
我認為看這篇文章的人,說明對類 unix
系統的執行流程不太瞭解。
另外這篇文章是基於 Mac
系統講解的,對於類 unix
系統應該差別不會太大
我一直認同的一個觀點,一定要了解程式執行背後的原理,在這裡給大家簡單介紹一下我個人認為在開發
shell
過程中應該瞭解的,方便大家理解並記憶,我本人的知識範圍有限,有描述不清楚或者不對的地方還請指正。
我們將在下面通過編寫一個例項來進行講解,目標編寫一個自己的命令,這個命令是為了滿足我每天 debug
的時候需要檢視日誌檔案
命令、變數、檔案
命令
export
在這裡您可以理解為設定一個環境變數,例如:export PATH="/usr/local/sbin:$PATH"
source
當你的 .bash_profile
檔案變更了,需要用 sorce .bash_profile
重新載入一遍
變數
$PATH
系統環境變數,你可以簡單的理解一些目錄的集合,通過 echo $PATH
可以看到
$HOME
當前使用者的家目錄
檔案
.bashrc
or .bash_profile
使用者個人的啟動檔案。可以用來擴充套件或重寫全域性配置指令碼中的設定。
你可以在你的終端命令列輸入 echo; ls -al;
會進入到你的家目錄下面列出所有檔案(包括隱藏檔案),在不同的類 unix
系統中他們的名字可能不太一樣,通常會有一些以 .
開頭的檔案
shell 如何載入?
我們今天自制一個稱為 plogs
的命令 , 當在你的終端輸入 plogs
或者任何你想開發的終端命令的時候或許會報出類似如下的錯誤:
command not found: plog
這個錯誤的原因是終端沒有在 $PATH
環境中找到這個命令
另外通常你想要開發一個命令的時候可以用 type [your command]
來檢測一下是否存在於系統中, 以免你自己的命令覆蓋掉系統的命令, 類似下面,就是檢測了系統中是否存在一個 p
命令
$ type p
p not found
如果這個命令存在,會表現成如下這樣子:
# rex @ HR in ~ [11:09:22] C:1
$ type ls
ls is an alias for ls -G
# rex @ HR in ~ [11:10:32]
$ type plogs
plogs is /Users/rex/bin/plogs
當你執行 plogs
這個命令的時候的時候系統要去 $PATH
這個目錄集合裡面挨個去找,有沒有一個可執行的命令檔案,例如上面就是在 /Users/rex/bin
下面找到了匹配的可執行檔案
那如何新增你存放可執行檔案的目錄放到 $PATH
中呢?你可以在你的 .bash_profile
(可能你的系統中叫其他名字) 檔案中加上這麼一行 $HOME/bin
,這樣你就可以將你的命令執行檔案放在 家目錄下面的 bin
目錄裡面了。
那為什麼要放在 bin
目錄中呢?因為bin
目錄通常是類 unix
系統存放可執行檔案的地方