chr*_*ris 1 linux error-handling bash bash-trap
使用trap可能有助于编写最干净的bash脚本.但是我想知道是否存在解决方案以便在以下情况下捕获错误:
GNU bash,版本4.2.45
好的
#!/bin/bash
trap 'echo OK i see error at line $LINENO;exit' ERR
unknowncommand
echo "test KO should never reach me"
Run Code Online (Sandbox Code Playgroud)
案例KO
#!/bin/bash
trap 'echo OK i see error at line $LINENO;exit' ERR
unknowncommand && echo "miss the trap"
echo "test KO should never reach me"
Run Code Online (Sandbox Code Playgroud)
&&使整个句子不是ERR.您想要评估整个评估的退出状态,而不是尝试短路.一种方法是将整个事物包装在子shell中.例如:
#!/bin/bash
trap 'echo "OK i see error at line $LINENO"; exit' ERR
(unknowncommand && echo "miss the trap")
echo "test KO should never reach me"
Run Code Online (Sandbox Code Playgroud)
这按预期工作.结果如下:
$ /tmp/err.sh
/tmp/err.sh: line 3: unknowncommand: command not found
OK i see error at line 3
Run Code Online (Sandbox Code Playgroud)