Bash
陷阱、ERR 和回顯錯誤行
我正在嘗試使用 Trap 創建一些錯誤報告,以針對所有錯誤呼叫函式:
Trap "_func" ERR
是否有可能得到 ERR 信號是從哪條線路發送的?外殼是 bash。
如果我這樣做,我可以閱讀並報告使用了什麼命令並記錄/執行一些操作。
或者也許我在這一切都錯了?
我測試了以下內容:
#!/bin/bash trap "ECHO $LINENO" ERR echo hello | grep "asdf"
並且
$LINENO
正在返回 2。不工作。
正如評論中指出的那樣,您的引用是錯誤的。您需要單引號以防止
$LINENO
在首次解析陷阱行時被擴展。這有效:
#! /bin/bash err_report() { echo "Error on line $1" } trap 'err_report $LINENO' ERR echo hello | grep foo # This is line number 9
執行它:
$ ./test.sh Error on line 9
您還可以使用 bash 內置的“呼叫者”:
#!/bin/bash err_report() { echo "errexit on line $(caller)" >&2 } trap err_report ERR echo hello | grep foo
它也列印文件名:
$ ./test.sh errexit on line 9 ./test.sh