使用 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"
案例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"
- 不幸的是,我们到达最后一句话,就好像
&&
使整个句子不是 ERR。
最佳答案
您想评估整个评估的退出状态,而不是尝试短路。一种方法是将整个东西包装在一个子外壳中。例如:
#!/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"
这按预期工作。结果如下所示:
$ /tmp/err.sh
/tmp/err.sh: line 3: unknowncommand: command not found
OK i see error at line 3
关于&& 的 Linux 陷阱最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23155143/