我正在尝试编写一个 shell 脚本,该脚本在命令失败时中止并显示有问题的行号。
set -e
trap 'echo "$0 FAILED at line ${LINENO}"' ERR
事实证明,陷阱行不适用于 Ubuntu 的默认 shell 脚本解释器 dash。如果我将 shebang 行更改为 #!/bin/bash
这有效,但不适用于 #!/bin/sh
。有没有办法在不依赖 bash 的情况下完成这项工作?
顺便说一句,我从破折号得到的错误是这样的:
trap: ERR: bad trap
最佳答案
您可以像这样在退出时捕获并测试退出代码:
set -e
trap '[ $? -eq 0 ] && exit 0 || echo "$0 FAILED at line ${LINENO}"' EXIT
关于bash - 在 shell 脚本中可移植地捕获 ERR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31313305/