HeadlinesBriefing HeadlinesBriefing 12 languages

Once: Cache CLI Commands

Hacker News ·

🇬🇧 English

once is a command-line tool that runs a command once in your current directory, prints its stdout, and keeps the output in memory in a small per-user background daemon. Repeated calls with the same command, directory and tenant key are answered from memory until the entry expires. The daemon stops automatically once its last entry has expired.

The typical use case is reading secrets from 1Password without approving every single read with your fingerprint. A tenant key, set once per terminal session in ~/.zshrc, lets you export a token such as GITHUB_TOKEN from a command like `once --ttl 8h --no-dir -- op read op://Private/Git Hub/token`. The first call prompts for authentication; further calls within eight hours do not. The same pattern works with mise, either globally or in a project-specific mise.local.toml file.

Installation requires Go 1.27 or later, using `go install github.com/alex0ptr/once@latest`. The tool has no dependencies beyond the standard library and runs on macOS and Linux only. Its main commands are `once --ttl DURATION`, `once status` to show the daemon and its entry count, `once clear` to drop all cached values, and `once help`.

Only stdout is cached. Results of commands that exit with a non-zero code are never cached, and the exit code is passed on. By default the working directory is part of the cache key, but --no-dir removes it, so one cached value serves every directory. The --until option sets an absolute expiry time, such as 10 pm today or tomorrow morning, whichever comes first with --ttl.

View original article →


🇸🇦 العربية

once: شغّل أمرًا مرة واحدة وأعد استخدام مخرجاته

once أداة سطر أوامر تنفّذ أمرًا واحدًا مرة واحدة في دليلك الحالي، وتطبع مخرجاته القياسية (stdout)، وتحتفظ بها في الذاكرة ضمن خدمة خلفية (daemon) صغيرة لكل مستخدم. تُلبّى الاستدعاءات المتكررة للأمر نفسه، مع الدليل نفسه ومفتاح المستأجر نفسه، من الذاكرة إلى أن تنتهي صلاحية المدخل. وتتوقف الخدمة تلقائيًا بعد انتهاء صلاحية آخر مدخل فيها.

أما حالة الاستخدام الشائعة فهي قراءة الأسرار من 1Password دون الموافقة على كل قراءة ببصمتك الإصبع. يتيح لك مفتاح المستأجر، الذي يُضبط مرة واحدة لكل جلسة طرفية في ملف ~/.zshrc، تصدير رمز مثل GITHUB_TOKEN من أمر مثل `once --ttl 8h --no-dir -- op read op://Private/Git Hub/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 وقت انتهاء مطلقًا، مثل العاشرة مساءً اليوم أو صباح الغد، أيهما يأتي أولًا مع --ttl.

لماذا نستخدم --no-dir عند تخزين الأسرار مؤقتًا باستخدام once؟

تُعيد أوامر مثل op read المخرج نفسه بغض النظر عن الدليل، لذا يتيح --no-dir لقيمة مخزنة واحدة أن تخدم جميع الأدلة، مما يتجنب طلبات المصادقة المتكررة.

العربية version →


🇧🇩 বাংলা

once: একটি কমান্ড একবার চালান এবং এর আউটপুট পুনরায় ব্যবহার করুন

once একটি কমান্ড-লাইন টুল, যা আপনার বর্তমান ডিরেক্টরিতে একটি কমান্ড একবার চালায়, এর stdout প্রিন্ট করে এবং আউটপুটটি প্রতি ব্যবহারকারীর একটি ছোট ব্যাকগ্রাউন্ড ডিমনে মেমরিতে সংরক্ষণ করে। একই কমান্ড, ডিরেক্টরি ও টেনান্ট কী সহ বারবার করা কল মেমরি থেকে উত্তর পায়, যতক্ষণ না এন্ট্রির মেয়াদ শেষ হয়। সর্বশেষ এন্ট্রির মেয়াদ শেষ হলে ডিমনটি নিজে থেকেই বন্ধ হয়ে যায়।

সাধারণ ব্যবহার হলো প্রতিটি পড়ার জন্য আপনার ফিঙ্গারপ্রিন্ট অনুমোদন না দিয়েই 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`।

শুধু stdout ক্যাশ করা হয়। শূন্য নয় এমন exit code দিয়ে শেষ হওয়া কমান্ডের ফলাফল কখনো ক্যাশ হয় না, এবং exit code অপরিবর্তিতভাবে পাঠানো হয়। ডিফল্টভাবে কার্যকরী ডিরেক্টরি ক্যাশ কীয়ের অংশ, তবে --no-dir তা সরিয়ে দেয়, ফলে একটি ক্যাশ করা মান সব ডিরেক্টরিতে কাজ করে। --until বিকল্প একটি নির্দিষ্ট মেয়াদ-শেষের সময় সেট করে, যেমন আজ রাত ১০টা বা আগামীকাল সকাল, --ttl-এর সাথে যেটি আগে আসে।

once দিয়ে সিক্রেট ক্যাশ করার সময় --no-dir কেন ব্যবহার করবেন?

op read-এর মতো কমান্ড ডিরেক্টরি নির্বিশেষে একই আউটপুট দেয়, তাই --no-dir একটি ক্যাশ করা মানকে সব ডিরেক্টরিতে কাজ করতে দেয় এবং বারবার প্রমাণীকরণের প্রম্পট এড়ায়।

বাংলা version →


🇩🇪 Deutsch

once: Einen Befehl einmal ausführen und seine Ausgabe wiederverwenden

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.

Warum --no-dir verwenden, wenn Geheimnisse mit once zwischengespeichert werden?

Befehle wie op read liefern unabhängig vom Verzeichnis dieselbe Ausgabe. --no-dir ermöglicht daher, dass ein zwischengespeicherter Wert alle Verzeichnisse bedient und wiederholte Authentifizierungsabfragen vermieden werden.

Deutsch version →


🇪🇸 Español

once: ejecuta un comando una vez y reutiliza su salida

once es una herramienta de línea de comandos que ejecuta un comando una sola vez en tu directorio actual, muestra su stdout y guarda la salida en memoria en un pequeño demonio en segundo plano por usuario. Las llamadas repetidas con el mismo comando, directorio y clave de inquilino se responden desde la memoria hasta que la entrada caduca. El demonio se detiene automáticamente cuando expira su última entrada.

El caso de uso típico es leer secretos de 1Password sin tener que aprobar cada lectura con tu huella digital. Una clave de inquilino, configurada una vez por sesión de terminal en ~/.zshrc, te permite exportar un token como GITHUB_TOKEN a partir de un comando como `once --ttl 8h --no-dir -- op read op://Private/Git Hub/token`. La primera llamada solicita autenticación; las siguientes dentro de ocho horas no. El mismo patrón funciona con mise, ya sea de forma global o en un archivo mise.local.toml específico de cada proyecto.

La instalación requiere Go 1.27 o posterior, mediante `go install github.com/alex0ptr/once@latest`. La herramienta no tiene más dependencias que la biblioteca estándar y solo funciona en macOS y Linux. Sus comandos principales son `once --ttl DURATION`, `once status` para mostrar el demonio y su número de entradas, `once clear` para eliminar todos los valores en caché y `once help`.

Solo se almacena en caché la salida stdout. Los resultados de comandos que terminan con un código distinto de cero nunca se guardan en caché, y el código de salida se transmite. Por defecto, el directorio de trabajo forma parte de la clave de caché, pero --no-dir lo excluye, de modo que un único valor en caché sirve para todos los directorios. La opción --until establece una hora de caducidad absoluta, como las 22:00 de hoy o mañana por la mañana, la que llegue primero junto con --ttl.

¿Por qué usar --no-dir al guardar secretos en caché con once?

Comandos como op read devuelven la misma salida sin importar el directorio, así que --no-dir permite que un único valor en caché sirva para todos los directorios, evitando solicitudes de autenticación repetidas.

Español version →


🇫🇷 Français

once : exécuter une commande une fois et réutiliser sa sortie

once est un outil en ligne de commande qui exécute une commande une seule fois dans votre répertoire courant, affiche sa sortie standard (stdout) et conserve ce résultat en mémoire dans un petit démon d'arrière-plan propre à chaque utilisateur. Les appels répétés avec la même commande, le même répertoire et la même clé de locataire reçoivent une réponse depuis la mémoire jusqu'à l'expiration de l'entrée. Le démon s'arrête automatiquement une fois sa dernière entrée expirée.

Le cas d'usage typique consiste à lire des secrets depuis 1Password sans valider chaque lecture avec votre empreinte digitale. Une clé de locataire, définie une fois par session de terminal dans ~/.zshrc, permet d'exporter un jeton tel que GITHUB_TOKEN à partir d'une commande comme `once --ttl 8h --no-dir -- op read op://Private/Git Hub/token`. Le premier appel demande une authentification ; les appels suivants, dans les huit heures, n'en demandent pas. Le même schéma fonctionne avec mise, soit globalement, soit dans un fichier mise.local.toml propre à un projet.

L'installation nécessite Go 1.27 ou une version ultérieure, via `go install github.com/alex0ptr/once@latest`. L'outil n'a pas d'autre dépendance que la bibliothèque standard et ne fonctionne que sous macOS et Linux. Ses principales commandes sont `once --ttl DURATION`, `once status` pour afficher le démon et le nombre de ses entrées, `once clear` pour supprimer toutes les valeurs en cache, et `once help`.

Seule la sortie standard est mise en cache. Les résultats des commandes qui se terminent avec un code de sortie non nul ne sont jamais mis en cache, et le code de sortie est transmis. Par défaut, le répertoire de travail fait partie de la clé de cache, mais l'option --no-dir le retire, si bien qu'une seule valeur en cache sert à tous les répertoires. L'option --until fixe une échéance absolue, comme 22 h aujourd'hui ou demain matin, la première atteinte l'emportant sur --ttl.

Pourquoi utiliser --no-dir lors de la mise en cache de secrets avec once ?

Des commandes comme op read renvoient la même sortie quel que soit le répertoire ; --no-dir permet donc à une seule valeur en cache de servir tous les répertoires, évitant des demandes d'authentification répétées.

Français version →


🇮🇳 हिन्दी

once: कोई कमांड एक बार चलाएँ और उसका आउटपुट दोबारा उपयोग करें

once एक कमांड-लाइन टूल है जो आपकी वर्तमान डायरेक्टरी में कोई कमांड एक बार चलाता है, उसका stdout प्रिंट करता है, और आउटपुट को प्रति-उपयोगकर्ता एक छोटे बैकग्राउंड डेमन में मेमोरी में रखता है। एक ही कमांड, डायरेक्टरी और टेनेंट कुंजी के साथ बार-बार की गई कॉल्स का उत्तर तब तक मेमोरी से दिया जाता है जब तक एंट्री समाप्त नहीं हो जाती। अंतिम एंट्री समाप्त होने के बाद डेमन अपने-आप रुक जाता है।

इसका सामान्य उपयोग 1Password से गुप्त जानकारी (secrets) पढ़ना है, बिना हर पढ़ने को अपने फ़िंगरप्रिंट से स्वीकृत किए। ~/.zshrc में हर टर्मिनल सत्र के लिए एक बार सेट की गई टेनेंट कुंजी आपको `once --ttl 8h --no-dir -- op read op://Private/Git Hub/token` जैसे कमांड से GITHUB_TOKEN जैसा टोकन export करने देती है। पहली कॉल प्रमाणीकरण माँगती है; आठ घंटों के भीतर की अगली कॉल नहीं माँगती। यही पैटर्न 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`।

केवल stdout कैश होता है। जो कमांड शून्य-से-भिन्न निकास कोड के साथ समाप्त होते हैं, उनके परिणाम कभी कैश नहीं होते, और निकास कोड आगे भेजा जाता है। डिफ़ॉल्ट रूप से कार्यशील डायरेक्टरी कैश कुंजी का हिस्सा होती है, परंतु --no-dir इसे हटा देता है, जिससे एक कैश्ड मान हर डायरेक्टरी में काम आता है। --until विकल्प एक निरपेक्ष समाप्ति समय सेट करता है, जैसे आज रात 10 बजे या कल सुबह, जो भी --ttl के साथ पहले आए।

once के साथ गुप्त जानकारी कैश करते समय --no-dir का उपयोग क्यों करें?

op read जैसे कमांड डायरेक्टरी चाहे जो हो, एक ही आउटपुट देते हैं, इसलिए --no-dir एक कैश्ड मान को हर डायरेक्टरी में उपयोग करने देता है, जिससे बार-बार प्रमाणीकरण संकेत से बचा जा सकता है।

हिन्दी version →


🇮🇩 Bahasa Indonesia

once: Jalankan Perintah Sekali, Gunakan Ulang Outputnya

once adalah alat baris perintah yang menjalankan sebuah perintah sekali di direktori saat ini, menampilkan stdout-nya, dan menyimpan output tersebut di memori dalam daemon latar belakang kecil per pengguna. Panggilan berulang dengan perintah, direktori, dan kunci tenant yang sama akan dijawab dari memori hingga entri tersebut kedaluwarsa. Daemon berhenti secara otomatis setelah entri terakhirnya kedaluwarsa.

Kasus penggunaan yang umum adalah membaca rahasia dari 1Password tanpa harus menyetujui setiap pembacaan dengan sidik jari Anda. Kunci tenant, yang diatur sekali per sesi terminal di ~/.zshrc, memungkinkan Anda mengekspor token seperti GITHUB_TOKEN dari perintah seperti `once --ttl 8h --no-dir -- op read op://Private/Git Hub/token`. Panggilan pertama meminta autentikasi; panggilan berikutnya dalam delapan jam tidak. Pola yang sama juga berfungsi dengan mise, baik secara global maupun dalam berkas mise.local.toml khusus proyek.

Pemasangan memerlukan Go 1.27 atau yang lebih baru, menggunakan `go install github.com/alex0ptr/once@latest`. Alat ini tidak memiliki dependensi selain pustaka standar dan hanya berjalan di macOS dan Linux. Perintah utamanya adalah `once --ttl DURATION`, `once status` untuk menampilkan daemon dan jumlah entrinya, `once clear` untuk menghapus semua nilai yang di-cache, dan `once help`.

Hanya stdout yang di-cache. Hasil perintah yang keluar dengan kode non-nol tidak pernah di-cache, dan kode keluarnya diteruskan. Secara bawaan, direktori kerja menjadi bagian dari kunci cache, tetapi --no-dir menghilangkannya sehingga satu nilai cache dapat digunakan di semua direktori. Opsi --until menetapkan waktu kedaluwarsa absolut, misalnya pukul 22.00 hari ini atau besok pagi, mana pun yang lebih dulu tercapai bersama --ttl.

Mengapa menggunakan --no-dir saat men-cache rahasia dengan once?

Perintah seperti op read menghasilkan output yang sama terlepas dari direktorinya, sehingga --no-dir memungkinkan satu nilai cache melayani semua direktori dan menghindari permintaan autentikasi yang berulang.

Bahasa Indonesia version →


🇯🇵 日本語

once:コマンドを一度だけ実行して出力を再利用

once は、現在のディレクトリでコマンドを一度だけ実行し、その標準出力(stdout)を表示するとともに、ユーザーごとの小さなバックグラウンドデーモンのメモリに結果を保持するコマンドラインツールです。同じコマンド、ディレクトリ、テナントキーでの繰り返し呼び出しは、エントリの期限切れまでメモリから応答されます。デーモンは最後のエントリが期限切れになると自動的に停止します。

典型的な用途は、指紋認証で読み取りを毎回承認することなく、1Password からシークレットを読み取ることです。~/.zshrc でターミナルセッションごとに一度設定したテナントキーを使い、`once --ttl 8h --no-dir -- op read op://Private/Git Hub/token` のようなコマンドで GITHUB_TOKEN などのトークンをエクスポートできます。最初の呼び出しでは認証が求められ、8 時間以内の後続の呼び出しでは求められません。同じパターンは 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 を指定するとそれが除外され、1 つのキャッシュ値をすべてのディレクトリで共有できます。--until オプションは、今日の 22 時や明朝などの絶対的な有効期限を設定します。--ttl と併用した場合は、いずれか早い方が適用されます。

once でシークレットをキャッシュする際、--no-dir を使うのはなぜですか?

op read のようなコマンドはディレクトリに関係なく同じ出力を返すため、--no-dir を使うと 1 つのキャッシュ値をすべてのディレクトリで利用でき、認証の要求を繰り返さずに済みます。

日本語 version →


🇧🇷 Português

once: execute um comando uma vez e reutilize sua saída

once é uma ferramenta de linha de comando que executa um comando uma única vez no seu diretório atual, exibe sua saída padrão (stdout) e mantém essa saída na memória em um pequeno daemon em segundo plano por usuário. Chamadas repetidas com o mesmo comando, diretório e chave de inquilino são respondidas a partir da memória até que a entrada expire. O daemon para automaticamente assim que sua última entrada expira.

O caso de uso típico é ler segredos do 1Password sem aprovar cada leitura com sua impressão digital. Uma chave de inquilino, definida uma vez por sessão de terminal no ~/.zshrc, permite exportar um token como GITHUB_TOKEN a partir de um comando como `once --ttl 8h --no-dir -- op read op://Private/Git Hub/token`. A primeira chamada solicita autenticação; as chamadas seguintes, dentro de oito horas, não. O mesmo padrão funciona com o mise, seja globalmente ou em um arquivo mise.local.toml específico de um projeto.

A instalação exige o Go 1.27 ou superior, com `go install github.com/alex0ptr/once@latest`. A ferramenta não tem dependências além da biblioteca padrão e funciona apenas em macOS e Linux. Seus principais comandos são `once --ttl DURATION`, `once status` para exibir o daemon e o número de entradas, `once clear` para descartar todos os valores em cache e `once help`.

Apenas a saída padrão é armazenada em cache. Resultados de comandos que terminam com código de saída diferente de zero nunca são armazenados, e o código de saída é repassado. Por padrão, o diretório de trabalho faz parte da chave de cache, mas --no-dir o remove, de modo que um único valor em cache atende a todos os diretórios. A opção --until define um horário absoluto de expiração, como 22h de hoje ou amanhã de manhã, o que ocorrer primeiro junto com --ttl.

Por que usar --no-dir ao armazenar segredos em cache com o once?

Comandos como op read retornam a mesma saída independentemente do diretório; assim, --no-dir permite que um único valor em cache sirva a todos os diretórios, evitando solicitações repetidas de autenticação.

Português version →


🇷🇺 Русский

once: выполните команду один раз и повторно используйте её вывод

once — это инструмент командной строки, который выполняет команду один раз в текущем каталоге, выводит её stdout и хранит результат в памяти небольшого фонового демона, работающего для каждого пользователя. Повторные вызовы с той же командой, тем же каталогом и тем же ключом арендатора возвращаются из памяти до истечения срока записи. Демон автоматически останавливается, когда истекает срок его последней записи.

Типичный сценарий использования — чтение секретов из 1Password без подтверждения каждого чтения вашим отпечатком пальца. Ключ арендатора, задаваемый один раз для каждого сеанса терминала в ~/.zshrc, позволяет экспортировать токен, например GITHUB_TOKEN, с помощью команды вида `once --ttl 8h --no-dir -- op read op://Private/Git Hub/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`.

Кэшируется только stdout. Результаты команд, завершившихся с ненулевым кодом возврата, никогда не кэшируются, а код возврата передаётся дальше. По умолчанию рабочий каталог входит в ключ кэша, но --no-dir исключает его, поэтому одно кэшированное значение используется во всех каталогах. Параметр --until задаёт абсолютное время истечения, например 22:00 сегодня или завтра утром, — что наступит раньше вместе с --ttl.

Зачем использовать --no-dir при кэшировании секретов с помощью once?

Такие команды, как op read, возвращают один и тот же результат независимо от каталога, поэтому --no-dir позволяет одному кэшированному значению обслуживать все каталоги и избегать повторных запросов аутентификации.

Русский version →


🇨🇳 简体中文

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

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 一起生效。

在使用 once 缓存机密信息时,为什么要使用 --no-dir?

像 op read 这样的命令无论在哪个目录下都返回相同的输出,因此 --no-dir 可以让一个缓存值服务于所有目录,避免重复的身份验证提示。

简体中文 version →