5

似乎on_errorBash 中的陷阱仅在定义它的功能范围内起作用。例如运行此脚本

#!/bin/bash

on_error() {
    echo 'on_error'
}

f() {
    false
    echo 'function f'
}

g() {
    trap on_error ERR
    echo 'function g'
    false
    f
}

g

产生:

function g
on_error
function f

有没有办法on_error全局捕获,这样我就不必分别在每个函数中捕获它?

4

1 回答 1

8

默认情况下,ERR陷阱不会被 shell 函数继承。

引自help set

  -E  If set, the ERR trap is inherited by shell functions.

  -o option-name
      Set the variable corresponding to option-name:
          errtrace     same as -E

set -o errtrace

在脚本的开头应该使其按预期工作。

于 2014-02-14T11:22:55.107 回答