&& 的 Linux 陷阱最佳实践

标签 linux bash error-handling 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"

案例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/

相关文章:

linux - Vim:将硬包装转换为软包装

java - 从 Linux 终端卸载 IntelliJ

linux - 用于与 DSA 交换机的无 PHY 连接的设备树

bash - 等待进程完成,或用户输入

vba - Excel VBA : Error Handling Breaking Mid-Code

c++ - 为什么 pthread_getname_np() 在 Linux 的线程中失败?

python - 如何实现标准输入、标准输出包装器?

linux - 用参数替换 bash 脚本中的部分命令

error-handling - Apache尝试提供noindex.html,但是403的错误处理程序设置是否不同?

vue.js - Vue.js属性或方法 “addToCart”未在实例上定义