在 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 中显示自定义错误消息并退出

显示错误的单元格地址和消息框,然后退出宏,如果没有,请继续

即使在使用异步任务后,当我尝试传递第二个意图时,我的应用程序也会退出并显示错误消息

发送 stderr/stdout 消息到函数并捕获退出信号

autossh 失败,退出状态为 1,没有错误消息

如何在python中抛出错误并使用自定义消息退出