每次命令失败后如何执行命令?

每次命令失败后如何执行命令?

我试图记录每次命令失败的时间(通过向我的 VPS 发送 HTTP 请求),以查看我搞砸了多少次。

我试过了:some_command || curl <my-vps>。有没有更好的办法?

答案1

您可以创建陷阱以进行错误处理。

例如:

trap 'echo "Error: $? occurred" >> log.txt' ERR

some_command
some_bad_command
some_command

或者您可以在脚本中使用它,如下所示。

#!/bin/bash

trap 'error_handler $? $LINENO' ERR

error_handler () {
    echo "Error: $1 occurred on line $2"
}

# rest of code...

作为您的用例的注释,我会做这样的事情:

trap 'curl <my-vps> --retry 0 --silent -o /dev/null &' ERR

这将以静默方式执行任务,如果出现错误,则不会启动另一个卷曲。

答案2

[[ "$(some-command-here)" ]] || { >&2 curl http://myvps.com; exit 1;}

如果你的命令通过,curl 将不会被执行。如果命令失败,将执行curl

要测试这一点,您可以这样做:

[[ "$(ls -l)" ]] || { >&2 curl -v http://google.com; exit 1;}

在这种情况下,我正在执行的ls -l命令显然会通过,但不会执行curl。

[[ "$(lsxx -l)" ]] || { >&2 curl -v http://google.com; exit 1;}

在这种情况下,我的命令被破坏并失败(lsxx不退出),但curl将被执行。

相关内容