在bash中退出并显示错误消息(oneline)
是否可以在出现错误时退出,并使用if语句显示消息,而不使用在bash中退出并显示错误消息(oneline),bash,message,exit,Bash,Message,Exit,是否可以在出现错误时退出,并使用if语句显示消息,而不使用 [[ $TRESHOLD =~ ^[0-9]+$ ]] || exit ERRCODE "Threshold must be an integer value!" 当然,|的右侧不会起作用,只是为了让您更好地了解我要实现的目标 事实上,我甚至不介意用哪个错误代码退出,只是为了显示信息 编辑 我知道这会起作用,但如何抑制显示所需的numeric arg 在我的自定义消息之后 [[ $TRESHOLD =~ ^[0-9]+$ ]] ||
[[ $TRESHOLD =~ ^[0-9]+$ ]] || exit ERRCODE "Threshold must be an integer value!"
当然,|
的右侧不会起作用,只是为了让您更好地了解我要实现的目标
事实上,我甚至不介意用哪个错误代码退出,只是为了显示信息
编辑
我知道这会起作用,但如何抑制显示所需的numeric arg
在我的自定义消息之后
[[ $TRESHOLD =~ ^[0-9]+$ ]] || exit "Threshold must be an integer value!"
exit
不接受多个参数。要打印任何您想要的消息,您可以使用echo
,然后退出
[[ $TRESHOLD =~ ^[0-9]+$ ]] || \
{ echo "Threshold must be an integer value!"; exit $ERRCODE; }
您可以使用助手函数:
function fail {
printf '%s\n' "$1" >&2 ## Send message to stderr. Exclude >&2 if you don't want it that way.
exit "${2-1}" ## Return a code specified by $2 or 1 by default.
}
[[ $TRESHOLD =~ ^[0-9]+$ ]] || fail "Threshold must be an integer value!"
函数名可以不同。直接使用
exit
可能很棘手,因为脚本可能来自其他地方。我更喜欢将subshell与set-e
一起使用(加上错误应该进入cerr,而不是cout):
使用&&运算符,只需将命令链接在一起即可
[[ $TRESHOLD =~ ^[0-9]+$ ]] || (echo "Threshold must be an integer value!" && exit $ERRCODE)
这是因为
echo
返回的代码是正数,即使在将输出发送到STDERR时也是如此。您能否解释一下它从何处提交消息所需的数值参数
,以及为什么我不能使用2>/dev/null
禁用它?很可能TRESHOLD
是空的<代码>回显转到标准输出。因此重定向2将不起作用。您可以打印到stderr:[$TRESHOLD=~^[0-9]+$].{echo 1>&2“阈值必须是整数值!”;exit$ERRCODE;}
它不是空的,因为未提供时,它设置了默认值。在我的示例| | exit“message”
,不使用echo
exit
只接受一个选项整数(exit code)。所以传递像“message”
这样的字符串是行不通的。哦,是的。我很愚蠢,我很困惑,因为打印我的自定义消息是错误的副作用。你的意思是如果我说错误\u退出“msg”代码
?我喜欢你的助手函数:)如果没有右边的括号,这将无法工作。这应该会起作用:[$TRESHOLD=~^[0-9]+$]| | |(echo“阈值必须是整数值!”&&exit$ERRCODE)
@splbudy谢谢。更新了答案。
[[ $TRESHOLD =~ ^[0-9]+$ ]] || (echo "Threshold must be an integer value!" && exit $ERRCODE)