相关疑难解决方法(0)

陷阱、ERR 和回显错误行

我正在尝试使用 Trap 创建一些错误报告来调用所有错误的函数:

Trap "_func" ERR
Run Code Online (Sandbox Code Playgroud)

是否有可能获得 ERR 信号是从哪条线路发送的?外壳是 bash。

如果我这样做,我可以阅读和报告使用了什么命令并记录/执行一些操作。

或者也许我在这一切都错了?

我测试了以下内容:

#!/bin/bash
trap "ECHO $LINENO" ERR

echo hello | grep "asdf"
Run Code Online (Sandbox Code Playgroud)

并且$LINENO正在返回 2. 不工作。

bash shell-script trap error-handling

40
推荐指数
5
解决办法
7万
查看次数

使用 `set -eu` 时 EXIT 和 ERR 陷阱的正确行为

在使用set -e( errexit), set -u( nounset) 以及 ERR 和 EXIT 陷阱时,我观察到一些奇怪的行为。它们似乎相关,因此将它们放在一个问题中似乎是合理的。

1)set -u不触发 ERR 陷阱

  • 代码:

    #!/bin/bash
    trap 'echo "ERR (rc: $?)"' ERR
    set -u
    echo ${UNSET_VAR}
    
    Run Code Online (Sandbox Code Playgroud)
  • 预期:ERR 陷阱被调用,RC != 0
  • 实际:没有调用ERR 陷阱,RC == 1
  • 注意:set -e不会改变结果

2)set -eu在 EXIT 陷阱中使用退出代码是 0 而不是 1

  • 代码:

    #!/bin/bash
    trap 'echo "EXIT (rc: $?)"' EXIT
    set -eu
    echo ${UNSET_VAR}
    
    Run Code Online (Sandbox Code Playgroud)
  • 预期:退出陷阱被调用,RC == 1
  • 实际:调用退出陷阱,RC == 0
  • 注意:当使用 时set …

scripting bash parameter shell-script trap

31
推荐指数
2
解决办法
2万
查看次数

标签 统计

bash ×2

shell-script ×2

trap ×2

error-handling ×1

parameter ×1

scripting ×1