Mac शॉर्टकट में कोई शेल स्क्रिप्ट सफल हुई या नहीं, यह जांचने के लिए उसके चलने के तुरंत बाद उसका एग्जिट स्टेटस कैप्चर करें और उस संख्या को टेक्स्ट के रूप में वापस भेजें। Shortcuts में, Run Shell Script एक्शन जोड़ें, फिर लौटाए गए मान के आधार पर ब्रांच बनाने के लिए If एक्शन का उपयोग करें: शेल परंपरा के अनुसार 0 का अर्थ सफलता है; गैर-शून्य मान किसी त्रुटि या अन्य असफल परिणाम को दर्शाता है। यह तरीका स्टेटस को स्पष्ट बनाता है, बजाय इसके कि यह मान लिया जाए कि शॉर्टकट एक अलग स्टेटस वेरिएबल प्रदान करता है।

शेल एक्शन जोड़ें और स्टेटस कैप्चर करें

अपने Mac पर Shortcuts ऐप में शॉर्टकट खोलें। एक्शन लाइब्रेरी में Run Shell Script खोजें और इसे जोड़ें। Apple शेल-स्क्रिप्ट एक्शन को Mac Shortcuts इकोसिस्टम के हिस्से के रूप में वर्णित करता है, हालांकि Shortcuts यूज़र गाइड इस एक्शन के लिए प्रत्येक सेटिंग या संस्करण विवरण का दस्तावेजीकरण नहीं करता है। यदि यह आपकी एक्शन लाइब्रेरी में नहीं है, तो Automator के समान नाम वाले एक्शन को इसकी जगह न रखें और यह न मान लें कि यह बिल्कुल उसी तरह व्यवहार करता है; अपने Mac पर उपलब्ध एक्शन की जांच करें। Apple का Shortcuts अवलोकन

स्क्रिप्ट फ़ील्ड में, स्क्रिप्ट कमांड को एक लाइन पर रखें, फिर ठीक अगली लाइन पर $? को कैप्चर करें। उदाहरण के लिए, यदि स्क्रिप्ट निष्पादन योग्य (executable) है और नीचे दिए गए उदाहरण पाथ पर स्थित है:

/Users/yourname/Scripts/refresh-files.sh >/dev/null
script_status=$?
printf '%s' "$script_status"

उदाहरण पाथ को अपनी स्क्रिप्ट के वास्तविक पाथ से बदलें। यह रीडायरेक्शन स्क्रिप्ट के स्टैंडर्ड आउटपुट को /dev/null पर भेजता है, जिससे एक्शन के टेक्स्ट आउटपुट में केवल स्टेटस संख्या ही शामिल होती है। यदि आप स्क्रिप्ट का आउटपुट भी चाहते हैं तो >/dev/null को हटा दें, लेकिन तब लौटाए गए टेक्स्ट में वह आउटपुट और स्टेटस दोनों शामिल हो सकते हैं। स्टैंडर्ड एरर (Standard error) इस रीडायरेक्शन द्वारा दबाया नहीं जाता है।

$? सबसे हाल ही में पूरी हुई कमांड का एग्जिट स्टेटस रखता है। यही कारण है कि असाइनमेंट सीधे स्क्रिप्ट इनवोकेशन के बाद आना चाहिए: यदि कोई अन्य कमांड पहले चलती है, तो $? इसके बजाय उस कमांड का वर्णन करेगा। फिर printf सहेजे गए नंबर को टेक्स्ट के रूप में आउटपुट करता है, जिसे Shortcuts एक्शन आउटपुट के रूप में उपयोग कर सकता है। Apple की Mac शेल-स्क्रिप्ट वर्कफ़्लो गाइड

लौटाए गए नंबर के आधार पर ब्रांच बनाएं

Run Shell Script के बाद एक If एक्शन जोड़ें। इसका इनपुट शेल एक्शन के आउटपुट पर सेट करें, टेक्स्ट कंडीशन is चुनें और 0 दर्ज करें। सफलता वाले एक्शन को If के तहत और किसी भी विफलता से संबंधित एक्शन को Otherwise के तहत रखें। Mac Shortcuts का If एक्शन आपके द्वारा कॉन्फ़िगर की गई स्थिति के आधार पर सामग्री को दो पाथ में से एक पर भेजता है। Mac पर Shortcuts में If एक्शन के लिए Apple की गाइड

परिणाम को टेक्स्ट के रूप में मानें क्योंकि शेल एक्शन इसे प्रिंट करता है। एक सफल रन को 0 लौटाना चाहिए; एक गैर-शून्य परिणाम को दूसरी शाखा (branch) लेनी चाहिए। आप विफलता शाखा में Show Alert एक्शन डाल सकते हैं और इसके संदेश में स्टेटस मान शामिल कर सकते हैं, या लॉगिंग के लिए बाद के किसी एक्शन में मान पास कर सकते हैं। विफलता के कारणों में अंतर करने के लिए शेल स्क्रिप्ट अक्सर विभिन्न गैर-शून्य मानों का उपयोग करती हैं, इसलिए संख्या को सुरक्षित रखने से निदान (diagnosis) में मदद मिल सकती है।

स्टेटस जांचते समय होने वाली सामान्य गलतियों से बचें

बाद के किसी एक्शन पर echo $? न डालें और यह अपेक्षा न करें कि यह पहले की शेल प्रक्रिया को संदर्भित करेगा। प्रत्येक शेल एक्शन अपना स्वयं का कमांड निष्पादन शुरू करता है; $? उसी शेल रन के अंदर और उस कमांड के तुरंत बाद अर्थपूर्ण होता है जिसका स्टेटस आप चाहते हैं। इसी तरह, स्क्रिप्ट चलने से पहले स्टेटस प्रिंट करने से केवल वही परिणाम प्रिंट होगा जो पहले चला था।

यदि स्क्रिप्ट कई कमांड निष्पादित करती है, तो इसका अंतिम एग्जिट स्टेटस इस बात पर निर्भर हो सकता है कि स्क्रिप्ट कैसे लिखी गई है। उदाहरण के लिए, बाद की कोई सफल कमांड पिछली विफलता को तब तक छिपा सकती है जब तक कि स्क्रिप्ट जानबूझकर उस विफलता को आगे न बढ़ाए (propagate) या संभाले नहीं। शॉर्टकट केवल उसी स्टेटस पर ब्रांच कर सकता है जो स्क्रिप्ट अंततः लौटाती है। यदि परिणाम उस चरण को नहीं दर्शाता है जिसकी आपको परवाह है, तो स्क्रिप्ट के अपने एरर हैंडलिंग की समीक्षा करें।

जब आप Terminal से कोई शॉर्टकट चलाते हैं

यदि आपका लक्ष्य यह जांचना है कि क्या पूरा शॉर्टकट Terminal से सफलतापूर्वक चला, तो Apple एक अलग shortcuts कमांड का दस्तावेजीकरण करता है: shortcuts run "Shortcut Name"। जब शॉर्टकट रन सफल होता है तो वह कमांड 0 और त्रुटि होने पर 1 पर समाप्त (exit) होता है। यह शॉर्टकट इनवोकेशन का स्टेटस है, न कि कोई समर्पित वेरिएबल जिसमें आंतरिक शेल एक्शन का एग्जिट कोड शामिल हो। शॉर्टकट ब्रांच में स्क्रिप्ट के अपने स्टेटस का उपयोग करने के लिए, इसे शेल एक्शन के अंदर कैप्चर करें और प्रिंट करें जैसा कि ऊपर बताया गया है। Mac पर Shortcuts के लिए Apple की कमांड-लाइन गाइड

व्यावहारिक तरीका सरल है: स्क्रिप्ट चलाएं, तुरंत $? सहेजें, उस सहेजे गए मान को प्रिंट करें, और If एक्शन में परिणामी टेक्स्ट की तुलना 0 से करें। यह Mac शॉर्टकट को एक स्पष्ट सफलता पाथ और एक विफलता पाथ देता है, जबकि निर्णय को स्क्रिप्ट के वास्तविक एग्जिट परिणाम से जोड़े रखता है।

स्रोत