Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在bash中退出并显示错误消息(oneline)_Bash_Message_Exit - Fatal编程技术网

在bash中退出并显示错误消息(oneline)

在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]+$ ]] ||

是否可以在出现错误时退出,并使用if语句显示消息,而不使用

[[ $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)