在 bash 中退出并显示错误消息(单行)
Posted
技术标签:
【中文标题】在 bash 中退出并显示错误消息(单行)【英文标题】:exit with error message in bash (oneline) 【发布时间】:2014-08-27 04:21:20 【问题描述】:是否可以在出现错误时退出并显示消息,无需使用 if 语句?
[[ $TRESHOLD =~ ^[0-9]+$ ]] || exit ERRCODE "Threshold must be an integer value!"
||
的右侧当然不起作用,只是为了让您更好地了解我要完成的工作。
实际上,我什至不介意它会退出哪个 ERR 代码,只是为了显示消息。
编辑
我知道这会起作用,但是如何抑制 numeric arg required
显示
在我的自定义消息之后?
[[ $TRESHOLD =~ ^[0-9]+$ ]] || exit "Threshold must be an integer value!"
【问题讨论】:
【参考方案1】:你可以使用辅助函数:
function fail
printf '%s\n' "$1" >&2 ## Send message to stderr.
exit "$2-1" ## Return a code specified by $2, or 1 by default.
[[ $TRESHOLD =~ ^[0-9]+$ ]] || fail "Threshold must be an integer value!"
函数名可以不同。
【讨论】:
你的意思是如果我说error_exit "msg" CODE
?我喜欢你的辅助功能:)【参考方案2】:
直接使用exit
可能会很棘手,因为脚本可能来自其他地方。我更喜欢使用带有set -e
的子shell(加上错误应该进入cerr,而不是cout):
set -e
[[ $TRESHOLD =~ ^[0-9]+$ ]] || \
(>&2 echo "Threshold must be an integer value!"; exit $ERRCODE)
【讨论】:
【参考方案3】:exit
不接受多个参数。要打印任何你想要的消息,你可以使用echo
然后退出。
[[ $TRESHOLD =~ ^[0-9]+$ ]] || \
echo "Threshold must be an integer value!"; exit $ERRCODE;
【讨论】:
你能解释一下它是从哪里发送消息numeric argument required
,以及为什么我不能用2>/dev/null
禁用它吗?
TRESHOLD
可能为空。 echo
转到标准输出。所以重定向 2 将不起作用。您可以打印到标准错误:[[ $TRESHOLD =~ ^[0-9]+$ ]] || echo 1>&2 "Threshold must be an integer value!"; exit $ERRCODE;
不为空,因为不提供时,设置了默认值。我提到了我的例子|| exit "message"
,没有使用echo
exit
只接受一个选项 integer(退出代码)。所以传递像"message"
这样的字符串是行不通的。
哦,是的。我很愚蠢,我很困惑,因为打印我的自定义消息是那个错误的副作用。以上是关于在 bash 中退出并显示错误消息(单行)的主要内容,如果未能解决你的问题,请参考以下文章
在 Azure PowerShell 中显示自定义错误消息并退出