once ist ein Kommandozeilenwerkzeug, das einen Befehl einmal in Ihrem aktuellen Verzeichnis ausführt, seine Standardausgabe (stdout) ausgibt und die Ausgabe im Speicher eines kleinen, benutzerspezifischen Hintergrunddienstes (Daemon) aufbewahrt. Wiederholte Aufrufe mit demselben Befehl, Verzeichnis und Mandantenschlüssel werden aus dem Speicher beantwortet, bis der Eintrag abläuft. Der Daemon beendet sich automatisch, sobald sein letzter Eintrag abgelaufen ist.
Der typische Anwendungsfall ist das Auslesen von Geheimnissen aus 1Password, ohne jeden Lesevorgang mit Ihrem Fingerabdruck zu bestätigen. Ein Mandantenschlüssel, der einmal pro Terminalsitzung in ~/.zshrc gesetzt wird, ermöglicht es, einen Token wie GITHUB_TOKEN über einen Befehl wie `once --ttl 8h --no-dir -- op read op://Private/Git Hub/token` zu exportieren. Der erste Aufruf fordert eine Authentifizierung an; weitere Aufrufe innerhalb von acht Stunden tun dies nicht. Dasselbe Muster funktioniert mit mise, entweder global oder in einer projektspezifischen Datei mise.local.toml.
Für die Installation wird Go 1.27 oder neuer benötigt, mit `go install github.com/alex0ptr/once@latest`. Das Werkzeug hat keine Abhängigkeiten außer der Standardbibliothek und läuft nur unter macOS und Linux. Die wichtigsten Befehle sind `once --ttl DURATION`, `once status` zur Anzeige des Daemons und seiner Eintragsanzahl, `once clear` zum Verwerfen aller zwischengespeicherten Werte und `once help`.
Nur die Standardausgabe wird zwischengespeichert. Ergebnisse von Befehlen, die mit einem Exit-Code ungleich null enden, werden nie gespeichert, und der Exit-Code wird weitergegeben. Standardmäßig ist das Arbeitsverzeichnis Teil des Cache-Schlüssels; mit --no-dir wird es entfernt, sodass ein zwischengespeicherter Wert für alle Verzeichnisse gilt. Die Option --until legt einen absoluten Ablaufzeitpunkt fest, etwa 22 Uhr heute oder morgen früh, je nachdem, was zusammen mit --ttl zuerst eintritt.
Quelle: Hacker News · Zusammengefasst von HeadlinesBriefing