我试图记录每次命令失败的时间(通过向我的 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将被执行。