回答
代替set -e
,使用ERR陷阱;您可以通過$BASH_LINENO
來獲取發生錯誤的特定行號。我在https://stackoverflow.com/a/185900/14122
提供腳本趁着這個在我的回答總結:
error() {
local sourcefile=$1
local lineno=$2
# ...logic for reporting an error at line $lineno
# of file $sourcefile goes here...
}
trap 'error "${BASH_SOURCE}" "${LINENO}"' ERR
如果您希望腳本在調用陷阱函數後退出,您也可以同時使用'set -e'和ERR陷阱,或者您可以在陷阱函數中明確調用'exit'。 –
任何想法如何使它處理未綁定變量'set -u; echo $ str'? –
在我們的作品bash圖書館中很棒!沒有更多的挖掘,看看什麼命令失敗。 –
您是否嘗試過--verbose
?
bash --verbose script.sh
不能單獨使用set -e
因爲處理將任何錯誤後立即停止。查看Bash參考手冊的Set Builtin section,以獲取有關-x和-v選項的更多信息,您可以使用它們進行調試。
喜歡的東西:
set -e
set -v
將退出對任何錯誤,並且會顯示每個輸入行,因爲它是閱讀。但是,它不會向您顯示錯誤信息。爲此,您需要自己做明確的錯誤檢查。
例如:
set +e
if false; then
real_exit_status=$?
echo 'Some useful error message.' >&2
exit $real_exit_status
fi
set -ex
將顯示(全部)行,因爲它們被執行,並在第一個命令停止返回非零(而不是一部分的if/while/until
構建體)。
化妝err.sh
set -e trap 'echo "ERROR: $BASH_SOURCE:$LINENO $BASH_COMMAND" >&2' ERR
包括它所有的腳本(
. err.sh
)。更換任何
... | while read X ; do ... ; done
與
在腳本while read X ; do ... ; done < <(...)
的陷阱錯誤消息給正確的行數/命令
- 1. 當使用set時,bash單行條件失敗-e
- 2. 使用set -e /套+ E在bash與
- 3. 如何在設置-e選項時避免bash腳本失敗?
- 4. bash set -e在看起來沒有錯誤的命令後退出
- 5. 創建一個Bash命令提示符,在前一個命令失敗後顯示紅色$
- 6. Django:SyncDB失敗後Loaddata命令
- 7. 設置-e使命令失敗的Shell別名?
- 8. bash中的等價命令失敗?
- 9. 如何撤銷「set -e」的效果,如果有任何命令失敗,立即退出
- 10. SSH2_EXEC()命令失敗
- 11. bash繼續執行命令失敗
- 12. 在bash使用-e時,路過的命令前的感嘆號仍然不會導致腳本失敗
- 13. 如何在命令失敗時退出?
- 14. 如何將最後命令的掛牆時間放入Bash提示符中?
- 15. 單線程測試使用bash的失敗命令
- 16. set var = command後無法使用命令
- 17. 命令失敗
- 18. &bash命令後
- 19. Powershell命令失敗
- 20. 在外部命令失敗時在vim中顯示STDOUT
- 21. 當預編譯資產時,「命令失敗,並顯示狀態()」
- 22. 如何在「set + e」不夠時保持bash腳本運行?
- 23. 如果任何單個命令失敗,但仍然運行所有命令,則Bash會失敗
- 24. cURL命令失敗
- 25. Merb的 - wkhtmltopdf命令失敗
- 26. SQL命令失敗
- 27. Perl系統()命令失敗後叉
- 28. Set-WebConfigurationProperty失敗
- 29. 使用「set」命令的簡單bash腳本
- 30. 如何在命令替換失敗時使zsh在整行失敗?
不要使用set -e,請使用你自己的錯誤檢查。 – jordanm
我同意約旦。請參閱[BashFAQ/105](http://mywiki.wooledge.org/BashFAQ/105)以獲取更多信息。 –