將 Bash Function 裡面,命令的正確執行結果 + 錯誤輸出 + 真正執行的命令(變數會變成值) 通通都倒到同一個檔案中,不用手動一行一行在行尾加上 & > /dev/null
,而且加上行號、function 名稱,好讓你以後除錯時超清楚!
/var/log
底下,所以以下範例需要由 root 使用者或 sudo user 執行。.
代表隱藏檔案,所以不能用 ll
,大部分的 ll
都是 alias ll="ls -l"
,要記得用 ls -al
這是宣告一個 Bash function,叫做 TRACE_LOG
,之後你可以在 script 其他地方用 TRACE_LOG
來呼叫它。
$(basename "${BASH_SOURCE[0]}")
會取得目前這個 script 的檔名,例如 myscript.sh
。這樣做的目的是:自動為每個 script 建立一個獨立的 log 檔,方便紀錄。
echo
或 ls
等指令的輸出都不會出現在螢幕上,而是寫進 log 檔。這是在啟用 Bash 的「除錯模式」所需的變數。
BASH_XTRACEFD=3
:告訴 Bash,把除錯訊息(由 set -x
產生的 trace)寫入「檔案描述符 3」,也就是 log 檔。PS4='($BASH_SOURCE:$LINENO:$FUNCNAME): '
:設定每一行除錯訊息的開頭格式,包括:
$BASH_SOURCE
:是哪個 script 檔案$LINENO
:是哪一行$FUNCNAME
:是在哪個 function 裡舉例產生的 log 可能會長這樣:
這樣可以清楚知道程式執行到哪裡、哪一行。
BASH_XTRACEFD
)。你只要在 script 裡面某個地方寫:
從那一行開始,這支 script 的輸出和行為紀錄就會開始寫進 log 檔 /var/log/.xxx.log
。
執行結果 :