我希望我的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
相反?
答案 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个细微差别:
(
,)
中命令后的退出代码。