捕获bash执行错误

时间:2016-06-20 09:32:08

标签: bash

我希望我的bash脚本检测执行错误并退出。

我使用try/yell/die方法的时间最长here

yell() { echo "$0: $*" >&2; }
die() { echo -e "\e[31m$*\e[0m"; exit 1; }
try() { "$@" || die "cannot $*"; }

然而,这需要我将命令包裹起来;

try curl https://blah.com | try bash

似乎更好的方法是使用;

set -e
set -o pipefail
set -E

使用set方法是否有任何缺点,与try/yell/die相反?

2 个答案:

答案 0 :(得分:1)

有关相关讨论,请参阅Why doesn't set -e (or set -o errexit, or trap ERR) do what I expected?。 - 汤姆·费内奇

答案 1 :(得分:0)

仅供参考:

我用...

#!/usr/bin/env bash

shout() { echo "$0: $*" >&2; }
die() { shout "${@:2} ($1)"; exit $1; }
try() { "$@" || die $? "cannot $*"; }

2个细微差别:

  1. 我们最终收到的退出代码是由正在尝试的命令生成的退出代码。
  2. 喊叫中包含()中命令后的退出代码。