Chrono Mock
भाषाहिन्दी

कमांड-लाइन संदर्भ

दोनों कमांड का हर फ़्लैग, दोनों एग्ज़िट कोड तालिकाएँ, और लौटे हुए आउटपुट को पढ़ने का तरीका। तर्क समेत वर्णनात्मक संस्करण CLI और CI पेज पर है।

दो कमांड

chrono run किसी ऐप्लिकेशन को अलग तारीख़ और समय पर शुरू करता है। chrono calc एक तारीख़ निकालता है और बताता है कि वह दिलचस्प क्यों है। दोनों एक ही स्टेप-व्याकरण साझा करते हैं, इसलिए एक के लिए लिखा गया शिफ़्ट दूसरे में भी वही मतलब रखता है।

chrono version तीसरे और कहीं छोटे सवाल का जवाब देता है: यह कौन-सा बिल्ड है, एक्ज़ीक्यूटेबल दोनों कोर में से कौन-सा है, और वह कौन-सा प्रोटोकॉल संस्करण बोलता है। stdout पर एक ही पंक्ति, ताकि कोई स्क्रिप्ट उसे पकड़ सके।

chrono license चौथे का जवाब देता है: यह बिल्ड किस लाइसेंस के तहत वितरित होता है, वारंटी की अस्वीकृति, और इसमें जुड़े तीसरे पक्ष के घटक। यह भी बताता है कि पूरा लाइसेंस पाठ और तीसरे पक्ष की सूचनाएँ डिस्क पर कहाँ हैं, या यह मान लेता है कि जो प्रति आप चला रहे हैं उसके बगल में वे नहीं हैं। --components सारांश की जगह हर शामिल कंपोनेंट को उसके संस्करण के साथ सूचीबद्ध करता है।

chrono presets प्रीसेट कैटलॉग को उसी तरह सूचीबद्ध करता है जैसे --preset उसे पढ़ता है: फ़ोल्डर का हर प्रीसेट, कैलकुलेटर के व्याकरण के पढ़े जाने वाले शब्दों में लिखा हुआ, और हर वह फ़ाइल जिसे वह अस्वीकार करेगा, कारण सहित। --json chronomock.presets/1 लिखता है और --dir दूसरा फ़ोल्डर बताता है।

chrono run <target> [options]
chrono calc [options]
chrono version        # chrono 0.4.0 (x64, protocol 1)
chrono license        # GPL-3.0-only, और क्या-क्या साथ बंडल है
chrono presets        # कैटलॉग, जैसे --preset उसे पढ़ता है
chrono --help          # सभी का उपयोग

chrono run - विकल्प

फ़्लैगयह क्या करता है
--at <moment> शुरुआती क्षण, सत्र के ज़ोन में। निरपेक्ष (2038-01-19T03:14:07) या शुरू में चिह्न वाला सापेक्ष (+1d, -2h)। इकाइयाँ: s m h d w mo q y - m मिनट है और mo महीने। इस फ़्लैग के बिना सत्र की घड़ी असली मौजूदा समय से शुरू होती है, इसलिए अकेला --mode xN सिर्फ़ टारगेट को तेज़ चलाता है।
--zone +HH:MM सत्र का ज़ोन: वह ज़ोन जिसमें क्षण लिखा जाता है, और जिसे टारगेट की लोकल-टाइम कॉल रिपोर्ट करती हैं। स्थिर ऑफ़सेट, डेलाइट सेविंग के बिना। इसके बिना, होस्ट का अपना ज़ोन।
--mode flow|frozen|xN flow असली गति पर चलता है, frozen घड़ी को रोके रखता है, xN उसे N गुना तेज़ चलाता है (x60 एक घंटे को एक मिनट बना देता है, x1440 एक दिन को)।
--scale-duration बीते समय की धुरी को भी तेज़ करें: टिक काउंट, इंटरप्ट टाइम, स्लीप और टाइमर। ऑब्जेक्ट पर प्रतीक्षा गिनी जाती है और अपनी असली अवधि रखती है। डिफ़ॉल्ट रूप से बंद, क्योंकि दीवार घड़ी और स्टॉपवॉच अलग-अलग सवाल हैं। किसी तय तारीख़ और समय पर सेट टाइमर या देरी इस विकल्प के साथ और इसके बिना भी सत्र की घड़ी के साथ चलती है।
--scale-qpc हाई-रेज़ोल्यूशन काउंटर को भी स्केल करता है, जहाँ से Python 3.13+ का monotonic, .NET का Stopwatch और Java का nanoTime बीता हुआ समय पढ़ते हैं। डिफ़ॉल्ट रूप से बंद: जो ऐप्लिकेशन उसी काउंटर से अपनी रेंडरिंग का समय नापता है, वह बिगड़ा हुआ दिख सकता है।
--ticks N N हार्टबीट के बाद, हर एक असली सेकंड की, सत्र ख़त्म करके रिपोर्ट देता है। इसके बिना टूल तब तक जुड़ा रहता है जब तक टारगेट, और उसके शुरू किए हर प्रोग्राम जो सत्र की घड़ी पर चलता है, बाहर न निकल जाए - जो लॉन्चर तुरंत ख़त्म हो जाता है, वह सत्र उस ऐप्लिकेशन के लिए छोड़ जाता है जो उसने शुरू किया।
--timeout <s> इतने सेकंड बाद हार मानकर 6 के साथ बाहर निकलता है, उस पाइपलाइन के लिए जो अटक नहीं सकती। इस फ़्लैग से स्वतंत्र, जो कोर 15 सेकंड तक कुछ न कहे उसे रोककर वह भी 6 के साथ बाहर निकलता है - दोनों स्थितियों में रन बीच में कट जाता है, इसलिए उसमें कोई निर्णय नहीं होता।
--args "..." टारगेट के तर्क, एक स्ट्रिंग के रूप में, उसी नियम से बाँटे जाते हैं जो Windows इस्तेमाल करता है - इसलिए स्पेस वाला तर्क साबुत रहता है। Chromium टारगेट के लिए --user-data-dir और --remote-debugging-port ओवरराइड नहीं किए जाते, मना कर दिए जाते हैं: सत्र को अपनी अलग प्रोफ़ाइल चाहिए, और चुपचाप आपकी असली ब्राउज़र प्रोफ़ाइल पर चलना ही वह एक चीज़ है जो कभी नहीं होनी चाहिए।
--cwd <dir> टारगेट को उस डायरेक्टरी में शुरू करता है। इसके बिना टारगेट हमारी डायरेक्टरी विरासत में पाता है, जो इस फ़्लैग के होने से पहले हर रन में होता था। ख़ाली मान उपयोग की त्रुटि है, “कोई डायरेक्टरी नहीं” नहीं - अनुपस्थित और ख़ाली अलग बातें हैं, और केवल अनुपस्थित वही है जो Windows को दिया जा सकता है। जो डायरेक्टरी मौजूद नहीं है, वह कुछ भी लॉन्च होने से पहले सत्र को target.cwd_missing के साथ रोक देती है, बजाय इसके कि बाद में ऐसे टारगेट के रूप में सामने आए जो शुरू ही नहीं होता।
--preset <id> क्षण और गति presets/<id>.json से लेता है। --at, --mode और --scale-duration के साथ नहीं चलता, क्योंकि तब प्रीसेट दोनों का अकेला स्रोत होता है।
--param id=value प्रीसेट का एक पैरामीटर भरता है। दोहराया जा सकता है, --preset ज़रूरी है। केवल run में, ट्रायल की शुरुआती तारीख़ डिफ़ॉल्ट रूप से टारगेट एक्ज़ीक्यूटेबल की अपनी निर्माण-तारीख़ होती है, इसलिए ट्रायल प्रीसेट उसी दिन से गिनता है जिस दिन ऐप्लिकेशन इंस्टॉल हुआ, बिना आपके उसे टाइप किए।
--set-after T:M हार्टबीट T पर गति को M कर देता है। चलते समय गुणक कम से कम 1 होता है - सत्र के बीच में घड़ी को जमाना यहाँ उपलब्ध नहीं है।
--jump-after T:moment हार्टबीट T पर घड़ी को उस क्षण पर छलाँग लगवाता है, निरपेक्ष या सापेक्ष, सत्र के ज़ोन में।
--force शुरुआती निर्णय के यह कहने पर भी कि बदलाव असर में नहीं आया, सत्र को बनाए रखता है - डिफ़ॉल्ट रूप से टारगेट रोक दिया जाता है, क्योंकि जिस सत्र ने कुछ साबित नहीं किया वह बिना सत्र से भी बुरा है। निर्णय नहीं बदलता, और एग्ज़िट कोड भी नहीं। यह केवल तय करता है कि टारगेट चलता रहे या नहीं।
--no-embedded ऐप्लिकेशन के भीतर के वेब पेजों (WebView2, Qt WebEngine) को असली घड़ी पर रहने देता है और कोई डीबगिंग पोर्ट नहीं खोलता। इसके बिना सत्र ऐसे इंजन से एक स्थानीय पोर्ट खोलने को कहता है और उसी के ज़रिए उसके पेजों को सत्र की घड़ी पर रखता है - पोर्ट खुला रहने तक इस कंप्यूटर का कोई भी दूसरा प्रोग्राम उसका उपयोग करके उन पेजों तक पहुँच सकता है।
--elevated-embedded ऐसे ऐप्लिकेशन के लिए जो व्यवस्थापक (administrator) के रूप में चलता है, ऐसे Chrono Mock से जो खुद भी व्यवस्थापक के रूप में चल रहा हो। ऐसे ऐप्लिकेशन के लिए WebView2 वह सेटिंग अनदेखी कर देता है जिसके ज़रिए सत्र उसके पेजों तक पहुँचता है, इसलिए सत्र अपनी अवधि भर मशीन की रजिस्ट्री में (HKLM, ऐप्लिकेशन की .exe के नाम पर) एक मान लिखता है और अंत में उसे हटा देता है। ऐप्लिकेशन चलते समय इस कंप्यूटर का कोई भी दूसरा प्रोग्राम पोर्ट के ज़रिए उसके पेजों तक पहुँच सकता है, और ऐप्लिकेशन के पास व्यवस्थापक अधिकार होते हैं। --no-embedded के साथ नहीं।
--keep-background-timers वेब इंजन - Chromium या Electron ऐप्लिकेशन का ब्राउज़र, या किसी ऐप्लिकेशन के भीतर का इंजन - को इस तरह शुरू करता है कि छिपी हुई विंडो में टाइमर की रफ़्तार घटाना बंद रहे, ताकि छोटी की हुई विंडो भी सत्र की गति बनाए रखे। तब ऐप्लिकेशन छिपे होने पर भी पूरी रफ़्तार से काम करता है। --elevated-embedded से एडमिनिस्ट्रेटर के रूप में शुरू किया गया ऐप्लिकेशन इसे नहीं पाता।
--dry-run बिना कुछ शुरू किए छापता है कि सत्र क्या होगा: तय किया गया क्षण और ज़ोन और वे कहाँ से आए, प्रीसेट ने हर पैरामीटर में क्या भरा, बाँटने के बाद के तर्क, और टारगेट दोनों में से कौन-सा तरीका अपनाएगा। कोई प्रोसेस शुरू नहीं होती और कोई फ़ाइल नहीं लिखी जाती, उस फ़ाइल समेत जिसका नाम --report देता है। चलने लायक योजना पर यह 0 के साथ और ऐसे टारगेट पर जो है ही नहीं 2 के साथ निकलता है, जो वही कोड है जो असली रन उसी तथ्य पर देता है। योजना में कोई निर्णय नहीं होता और वह यह कहती भी है - निर्णय केवल असली सत्र का होता है। --json के साथ योजना डेटा के रूप में मिलती है, जिसमें session.elevated_embedded और session.elevated_embedded_value शामिल हैं। दूसरा वह फ़ाइल नाम है जिस पर रजिस्ट्री मान का नाम रखा जाता, जब विकल्प .exe लक्ष्य पर लागू हो, अन्यथा null। वहाँ नाम होना लिखे जाने का वादा नहीं है: सत्र मान तभी लिखता है जब Chrono Mock खुद व्यवस्थापक के रूप में चल रहा हो।
--report <path> इंसानी रिपोर्ट को फ़ाइल में लिखता है। काम करता है के अलावा कोई निर्णय उस फ़ाइल को अविश्वसनीय सबूत की चेतावनी से शुरू करता है, क्योंकि जो सबूत अपना संदेह छिपाता है वह किसी सबूत से भी बुरा है। काम करता है निर्णय वाला सत्र भी यह चेतावनी पाता है, जब ऐप्लिकेशन ने वह कोई भी घड़ी नहीं पढ़ी जिसे सत्र बदलता है, या जब वह Go प्रोग्राम है, जिसकी दीवार घड़ी तक Chrono Mock नहीं पहुँचता। फ़ाइल रन के बारे में भी बताती है: वर्ज़न, शुरू होने का समय, टारगेट, उसका फ़ोल्डर और फ़्लैग।
--report-args --report के साथ, टारगेट के आर्ग्युमेंट भी उस फ़ाइल में शब्दशः लिखता है। डिफ़ॉल्ट रूप से बंद, क्योंकि किसी आर्ग्युमेंट में पासवर्ड हो सकता है - तब फ़ाइल सिर्फ़ यह बताती है कि वे कितने थे।
--json रिपोर्ट की जगह सत्र को मशीन-पठनीय रिकॉर्ड के रूप में देता है - वही स्ट्रीम जिसे विंडो ख़ुद इस्तेमाल करती है। कंसोल ऐप्लिकेशन का अपना आउटपुट स्टैंडर्ड एरर पर जाता है, इसलिए स्टैंडर्ड आउटपुट में केवल रिकॉर्ड होते हैं और कुछ नहीं। सत्र ख़त्म होने पर भी चल रहा ऐप्लिकेशन वहाँ लिखता रहता है, इसलिए जो भी स्टैंडर्ड एरर को आख़िर तक पढ़ता है वह उसका इंतज़ार करता है, और रन यह बता देता है।

chrono run - एग्ज़िट कोड

एग्ज़िट कोड सत्र का निर्णय है, न कि वह जो ऐप्लिकेशन ने लौटाया। ऐप्लिकेशन का अपना एग्ज़िट कोड रिपोर्ट और सत्र के डेटा में अलग से दर्ज होता है - CLI और CI पेज बताता है कि इसे इस तरह क्यों रखा गया।

कोडअर्थ
0काम करता है - समय पढ़ने वाली हर प्रोसेस ने सत्र की घड़ी देखी
10आंशिक रूप से काम करता है - कुछ चैनल कवर हुए, कुछ नहीं
11काम नहीं करता - बदलाव प्रमुख चैनलों तक नहीं पहुँचा
4अनिर्धारित - कवरेज स्थापित नहीं की जा सकी। एक ईमानदार “बता नहीं सकता”, कभी दिखावटी पास नहीं
12टारगेट इंजेक्शन के तुरंत बाद ग़ायब हो गया और सत्र की घड़ी पर कुछ भी चलता नहीं छोड़ा, जो इशारा करता है कि कोई सिंगल-इंस्टेंस ऐप्लिकेशन पहले से चल रही प्रति को काम सौंप गया, या ऐसे प्रोग्राम को जिसमें सत्र प्रवेश नहीं कर सका, आम तौर पर दूसरी बिटनेस वाला। जो टारगेट ऐप्लिकेशन शुरू करके ख़त्म हो जाता है वह लॉन्चर है, और सत्र उस ऐप्लिकेशन के लिए जारी रहता है
1उपयोग की त्रुटि - ग़लत फ़्लैग, ग़लत व्यंजक, या ऐसा प्रीसेट जिसे यह कमांड स्वीकार नहीं करती
2टारगेट को लॉन्च या इंजेक्ट नहीं किया जा सका
3आंतरिक त्रुटि - इंजन शुरू नहीं हो सका, अप्रत्याशित स्थिति में पहुँच गया, या सत्र बंद करने से पहले रुक गया (उसका अपना एग्ज़िट कोड जो भी हो)। ऐसे रन में कोई निर्णय नहीं होता
5यह ऑपरेशन इस रिलीज़ में शामिल नहीं है - जैसे ऐसा प्रीसेट जिसके क्षण को कैलेंडर चाहिए, जिसे run अभी लोड नहीं कर सकता। जानबूझकर उपयोग की त्रुटि से अलग रखा गया: आपने ऐसी चीज़ माँगी जो अभी मौजूद नहीं है, ऐसी नहीं जो ग़लत है
6रन बीच में कट गया - --timeout पूरा हो गया, या इंजन 15 सेकंड तक जवाब देना बंद कर गया और रोक दिया गया। यह निर्णय नहीं है: सत्र बाधित हुआ, इसलिए यह टारगेट के बारे में किसी भी तरफ़ कुछ साबित नहीं करता
7एक और सत्र पहले से चल रहा है - एक समय में एक ही सत्र। उसके खत्म होने के बाद दोबारा कोशिश करना काफ़ी है
8सत्र किसी निर्णय तक पहुँचा, लेकिन उसका सबूत उस फ़ाइल में नहीं है जिसे --report बताता है - डिस्क भर गई थी, या किसी दूसरे प्रोग्राम ने पुरानी फ़ाइल खुली रखी थी, जो तब वैसी ही रहती है। निर्णय फिर भी उस रिपोर्ट में है जिसे कमांड छापता है

रिपोर्ट को पढ़ना

--json के बिना सत्र एक सादी रिपोर्ट पर ख़त्म होता है। हर पंक्ति या तो ऐसा तथ्य है जो सत्र ने देखा, या अनुपस्थित है - कुछ भी किसी सुनने में ठीक लगने वाले डिफ़ॉल्ट से नहीं भरा जाता।

Chrono Mock - session report
  target:   .\build\test.exe
  verdict:  WORKS - time substitution took effect  (processes: 1)
            every process that read time saw the session clock
  session:  fake clock reached 2038-01-19T03:14:08
            real elapsed 1.3s, fake elapsed 1.3s
  exited:   the target closed itself with code 3
  covered channels (substituted, with call counts, 10 calls in all):
            - pid 21240: GetSystemTimeAsFileTime (5 calls)
            - pid 21240: GetLocalTime (5 calls)
  observed channels (hooked but left real):
            - pid 21240: NtCreateUserProcess (0 calls)
  warnings:
            - the target opened a network connection ...
  • verdict - पैरेंट और हर चाइल्ड प्रोसेस पर परिवार का निर्णय, प्रोसेस की गिनती के साथ। एग्ज़िट कोड यही संख्या ले जाता है।
  • exited - ऐप्लिकेशन का अपना एग्ज़िट कोड, और केवल तब जब उसने ख़ुद को बंद किया। --ticks से सीमित रन टारगेट को चलता छोड़ता है, Chromium सत्र वह होता है जिसे टूल ख़ुद बंद करता है, और जो सत्र कभी शुरू ही नहीं हुआ उसका ऐसा कोई कोड नहीं होता - तब यह पंक्ति मनगढ़ंत शून्य दिखाने की जगह ग़ायब रहती है। क्रैश कोड एक बड़ी ऋणात्मक संख्या के रूप में आता है, इसलिए उसका हेक्साडेसिमल रूप भी दिया जाता है।
  • covered - वे चैनल जहाँ बदलाव पहुँचा, और हर एक वास्तव में कितनी बार पुकारा गया, प्रति प्रोसेस। गिनतियाँ प्रोसेस के पार कभी जोड़ी नहीं जातीं: एक प्रोसेस का ऑडिट दूसरी की संख्याएँ उधार नहीं ले सकता। गिनती 1048576 पर रुक जाती है और तब कम से कम उतनी दिखाती है।
  • observed - वे चैनल जिन पर हुक लगा पर जानबूझकर असली छोड़े गए, जैसे ऑब्जेक्ट वेट और मल्टीमीडिया टाइमर। उनका अपना अलग वर्ग है, इसलिए उन्हें कभी बदला हुआ नहीं पढ़ा जाता।
  • uncovered - वे चैनल जो ऐप्लिकेशन ने माँगे और सत्र ने कवर नहीं किए। यही निर्णय को आंशिक बनाता है।
  • not fully cleaned up - वह सब जिसे टियरडाउन हटा न सका। साफ़ अंत पर अनुपस्थित रहता है, जो सामान्य स्थिति है।

chrono calc - विकल्प

कोई प्राकृतिक भाषा नहीं: हर फ़्लैग एक स्टेप है, और फ़्लैग का क्रम ही स्टेप का क्रम है। हर स्टेप के बाद का नतीजा छापा जाता है, इसलिए ग़लत स्टेप दबा रहने की जगह दिख जाता है।

फ़्लैगयह क्या करता है
--base today|now|<moment> कहाँ से शुरू करना है, डिफ़ॉल्ट today। सत्र के ज़ोन में तय होता है। 2025-02-31 जैसा असंभव दिन अस्वीकार कर दिया जाता है, चुपचाप अगले महीने में नहीं बदला जाता।
--base-utc <moment> --base जैसा, पर आरंभ सत्र ज़ोन में दीवार घड़ी की रीडिंग नहीं, बल्कि UTC का एक क्षण है, जिसके अंत में वैकल्पिक Z हो सकता है।
--shift ±N<unit> दोहराया जा सकता है। चिह्न ज़रूरी है। इकाइयाँ: s m h d w mo q y bd, या उनके पूरे नाम। m मिनट है, mo महीने। महीने, तिमाहियाँ और साल कैलेंडर की तारीख़ पर क्लैम्प के साथ मोड़े जाते हैं, इसलिए 31 जनवरी के एक महीने बाद फ़रवरी का अंत है, टिक की कोई निश्चित संख्या नहीं। bd (कार्यदिवस) को --calendar चाहिए।
--set-time HH:MM:SSमौजूदा नतीजे पर दिन का समय तय करता है।
--snap <target> किसी अवधि की सीमा पर छलाँग: som eom soq eoq soy eoy (महीने, तिमाही, साल की शुरुआत या अंत)। शुरुआत पहला दिन 00:00:00 पर है, अंत आख़िरी दिन 23:59:59 पर।
--nearest nbd|pbd आगे या पीछे का निकटतम कार्यदिवस, मौजूदा दिन समेत अगर वह पहले से कार्यदिवस हो। --calendar चाहिए।
--to-zone +HH:MM एक स्टेप: उसी क्षण को दूसरे स्थिर ऑफ़सेट में फिर से व्यक्त करता है। क्षण सुरक्षित रहता है, इसलिए एपॉक मान नहीं हिलता और केवल सिविल फ़ील्ड बदलते हैं। --zone से गड़बड़ाएँ नहीं।
--zone +HH:MM सत्र का ज़ोन, जो today और now तय करने और नतीजा दिखाने में इस्तेमाल होता है। इसके बिना, होस्ट का ज़ोन।
--calendar us-banking|us-federal|pl छुट्टियों का कैलेंडर लोड करता है। यह मेटाडेटा में कार्यदिवस और छुट्टी जोड़ता है और bd तथा --nearest चालू करता है। दोनों अमेरिकी कैलेंडर इसमें अलग हैं कि सप्ताहांत पर पड़ने वाली छुट्टी कैसे मानी जाए, जो ठीक वैसी एक-दिन की चूक है जिसे पकड़ने के लिए परीक्षण होता है। हर कैलेंडर वर्षों की एक सीमा के लिए उत्तर देता है: pl 2002 से, us-federal 1960 से और us-banking 2008 से। कार्यदिवस का जो चरण इस सीमा से पहले के किसी दिन तक पहुँचे, वह कोड 1 के साथ अस्वीकार होता है, और सीमा से पहले की तारीख़ "आकलन नहीं किया गया" के रूप में दिखती है। जब किसी कैलेंडर की छुट्टियों को कानून से आख़िरी बार एक साल से ज़्यादा पहले मिलाया गया हो, तो उसके आकलन किए गए बाद के दिन पर calendar_outdated का चिह्न लगता है, क्योंकि कोई नई छुट्टी छूटी हो सकती है।
--preset <id> --param id=value presets/<id>.json से एक नामित क्षण, उसके पैरामीटर भरकर। स्टेप फ़्लैग और --analyze के साथ नहीं चलता, और --calendar, --zone तथा --format के साथ जुड़ता है।
--analyze <date> चिपकाई गई तारीख़ को वापस पढ़कर बताता है कि वह क्या है। अस्पष्ट 04/08 दोनों पठनों में दिखाया जाता है, अमेरिकी और पोलिश, अंदाज़ा नहीं लगाया जाता - यही अस्पष्टता ग़लत बग रिपोर्टों का एक असली स्रोत है।
--format <mask> नतीजे को आपके अपने मास्क में भी छापता है, ताकि वह परीक्षणाधीन ऐप्लिकेशन के फ़ॉर्मैट से मेल खाए: yyyy-MM-dd HH:mm:ss। टोकन .NET और Java के अर्थ में अक्षर-भेद वाले हैं - M महीना है, m मिनट।
--json ऊपर के किसी भी उपयोग के लिए मशीनी आउटपुट (chronomock.calc/1), ताकि पाइपलाइन एक तारीख़ निकालकर उसे सीधे chrono run में वापस दे सके।
# तिमाही का आख़िरी कार्यदिवस, अमेरिकी बैंकिंग कैलेंडर में
chrono calc --base today --snap eoq --nearest pbd --calendar us-banking

chrono calc - एग्ज़िट कोड

एक अलग, छोटी तालिका: कैलकुलेटर के पास रिपोर्ट करने लायक कोई कवरेज निर्णय नहीं होता।

कोडअर्थ
0गणना हो गई
1उपयोग की त्रुटि - ग़लत फ़्लैग, असंभव तारीख़, सीमा का अतिक्रमण, या ऐसी कैलेंडर फ़ाइल जिसमें एक भी कार्यदिवस न हो
5यह स्टेप या इकाई इस रिलीज़ में शामिल नहीं है, या स्टेप को ऐसा कैलेंडर चाहिए जो आपने नहीं दिया। जानबूझकर उपयोग की त्रुटि से अलग, ताकि स्क्रिप्ट “अभी नहीं” और “ग़लत” में फ़र्क कर सके

आगे