退出码
如果你在围着 omem 写脚本——一个 cron 包装、一个 CI 步骤、一条 && 链——需要根据某个命令是成功了、什么都没找到、还是因为某个具体原因失败了来分支,那就看这一页。每个 omem 命令都以七个码之一退出,而且它们在任何地方都是同一个意思。
omem 用的是一套小而固定的契约:0 是成功,1 是通用失败,2–6 各自对应一种值得单独处理的具体情形。点一下某个码,看哪些命令会返回它、又究竟是什么触发了它:
最容易把人绊倒的,是结果为空时的 0。omem query "没人写过的东西" 什么都没查到,照样以 0 退出——因为”零命中”是一个有效的答案,不是错误。要想检测空结果,去看输出(--format json 会给你一个计数),别看退出码。
在脚本里根据码分支
Section titled “在脚本里根据码分支”这些码是稳定的,所以你可以直接照着它们写:
omem query "Q3 budget" --format json > hits.jsoncase $? 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查一个页面时,这几个具体的码能让你分清不存在、有歧义和格式不对:
omem page get a3f9c2bdcase $? in 0) : ;; # 页面已打印 3) echo "prefix matched several pages — add more characters" ;; 4) echo "no such page" ;; 6) echo "prefix too short (need ≥8 chars)" ;;esacomem install status 是个例外
Section titled “omem install status 是个例外”有一个命令不走这套契约:omem install status 报的是那个定时摄入的 launchd 任务的状态,它的 0–3 码是另一套意思。
| 码 | omem install status 的含义 |
|---|---|
0 | 已安装、已加载、上次运行以 0 退出、近期有摄入事件——健康。 |
1 | launchd plist 没有安装。 |
2 | 已安装,但 launchctl 没有加载它。 |
3 | 已安装且已加载,但上次运行失败了,或者 24 小时内一个摄入事件都没有。 |
所以 omem install status; echo $? 就是一句话的健康探针,监控脚本可以拿去轮询——只要记住它的码描述的是那个定时计划,不是上面那套通用的成功/失败契约。