[bash] 找出指令錯誤行號

bash, error line, 錯誤行

因為bash為直譯式語言,當程式碼一多時,很難找出錯誤的行號

這時候可以借助TRAP ERR功能,當有函數或執行檔返回值不為0時

顯示出此行號以方便除錯

 

LINENO為內建變數,可以顯示出當前執行的行號

這裡透過一個trace_error函數來擷取返回值非0錯誤,丟入參數為LINENO

#!/bin/bash

function trace_error()
{
	echo "Error occurs on line $1"
}

trap 'trace_error $LINENO' ERR

下面例子是故意寫出過濾不存在的字串,來看執行結果

#!/bin/bash

function trace_error()
{
	echo "Error occurs on line $1"
}

trap 'trace_error $LINENO' ERR

echo "Hello"
echo "World" | grep -i halo
echo "Bye"

執行結果

Hello
Error occurs on line 11
Bye

最後附上沒加上TRAP ERR的版本做比對,很難找出哪一行出問題

#!/bin/bash

echo "Hello"
echo "World" | grep -i wtf
echo "Bye"

執行結果

Hello
Bye