跳转到内容

退出码

如果你在围着 omem 写脚本——一个 cron 包装、一个 CI 步骤、一条 && 链——需要根据某个命令是成功了、什么都没找到、还是因为某个具体原因失败了来分支,那就看这一页。每个 omem 命令都以七个码之一退出,而且它们在任何地方都是同一个意思。

omem 用的是一套小而固定的契约:0 是成功,1 是通用失败,2–6 各自对应一种值得单独处理的具体情形点一下某个码,看哪些命令会返回它、又究竟是什么触发了它:

exit 0 · OK

成功——包括结果为空的情形。什么都没查到的 query 仍然 exit 0;"没命中"是一种答案,不是错误。

由谁返回
  • 任何命令操作顺利完成
  • omem query正常跑完——哪怕零命中
  • omem ingest每个条目都成功(或本就没有该处理的)

最容易把人绊倒的,是结果为空时的 0omem query "没人写过的东西" 什么都没查到,照样以 0 退出——因为”零命中”是一个有效的答案,不是错误。要想检测空结果,去看输出(--format json 会给你一个计数),别看退出码。

这些码是稳定的,所以你可以直接照着它们写:

Terminal window
omem query "Q3 budget" --format json > hits.json
case $? in
0) echo "query ran (may be empty — check hits.json)" ;;
2) echo "index not ready — run: omem index rebuild" ;;
6) echo "bad argument — check --since / --format" ;;
*) echo "query failed" ;;
esac

查一个页面时,这几个具体的码能让你分清不存在有歧义格式不对

Terminal window
omem page get a3f9c2bd
case $? in
0) : ;; # 页面已打印
3) echo "prefix matched several pages — add more characters" ;;
4) echo "no such page" ;;
6) echo "prefix too short (need ≥8 chars)" ;;
esac

有一个命令走这套契约:omem install status 报的是那个定时摄入的 launchd 任务的状态,它的 0–3 码是另一套意思。

omem install status 的含义
0已安装、已加载、上次运行以 0 退出、近期有摄入事件——健康。
1launchd plist 没有安装
2已安装,但 launchctl 没有加载它。
3已安装且已加载,但上次运行失败了,或者 24 小时内一个摄入事件都没有。

所以 omem install status; echo $? 就是一句话的健康探针,监控脚本可以拿去轮询——只要记住它的码描述的是那个定时计划,不是上面那套通用的成功/失败契约。

  • CLI 命令 —— 完整的命令参考,包括每个命令吃哪些 flag。
  • 配置 schema —— config.yaml 的每一个字段、它的默认值,以及哪些改了会有风险。