HeadlinesBriefing HeadlinesBriefing.com

once:运行一次命令,复用其输出

Hacker News •
×

once 是一个命令行工具,它在当前目录中运行一次命令,打印其标准输出,并将结果保存在每个用户的小型后台守护进程的内存中。对于相同的命令、目录和租户密钥的重复调用,会直接从内存中返回结果,直到该条目过期。守护进程在其最后一个条目过期后会自动停止。

典型的使用场景是从 1Password 读取机密信息,而无需每次读取都用您的指纹进行确认。在 ~/.zshrc 中为每个终端会话设置一次租户密钥,即可通过类似 `once --ttl 8h --no-dir -- op read op://Private/Git Hub/token` 的命令导出 GITHUB_TOKEN 等令牌。第一次调用会要求身份验证;在八小时内的后续调用则不再需要。同样的模式也适用于 mise,既可以全局使用,也可以在特定项目的 mise.local.toml 文件中使用。

安装需要 Go 1.27 或更高版本,使用 `go install github.com/alex0ptr/once@latest`。该工具除标准库外没有其他依赖,仅支持 macOS 和 Linux。其主要命令包括 `once --ttl DURATION`、用于显示守护进程及其条目数量的 `once status`、用于清除所有缓存值的 `once clear`,以及 `once help`。

仅缓存标准输出。以非零退出码结束的命令结果永远不会被缓存,并且退出码会被原样传递。默认情况下,工作目录是缓存键的一部分,但 --no-dir 会将其移除,因此一个缓存值可供所有目录使用。--until 选项设置绝对过期时间,例如今天晚上 10 点或明天早上,以先到者为准,与 --ttl 一起生效。

来源: Hacker News · 由HeadlinesBriefing整理摘要