একটি ম্যাক শর্টকাটে কোনো শেল স্ক্রিপ্ট সফল হয়েছে কি না তা পরীক্ষা করতে, এটি রান করার পরপরই এর এক্সিট স্ট্যাটাস ক্যাপচার করুন এবং সেই সংখ্যাটিকে টেক্সট হিসেবে ফেরত পাঠান। Shortcuts-এ, Run Shell Script অ্যাকশনটি যোগ করুন, তারপর ফিরে আসা মানের ওপর ভিত্তি করে ব্রাঞ্চ করার জন্য একটি If অ্যাকশন ব্যবহার করুন: শেল কনভেনশন অনুসারে 0 মানে সাফল্য; একটি অশূন্য (nonzero) মান কোনো ত্রুটি বা অন্যান্য অসফল ফলাফল নির্দেশ করে। শর্টকাটটি একটি পৃথক স্ট্যাটাস ভেরিয়েবল উন্মুক্ত করে—এমনটা ধরে নেওয়ার পরিবর্তে এই পদ্ধতিটি স্ট্যাটাসটিকে স্পষ্ট করে তোলে।
একটি শেল অ্যাকশন যোগ করুন এবং স্ট্যাটাসটি ক্যাপচার করুন
আপনার ম্যাকের Shortcuts অ্যাপে শর্টকাটটি খুলুন। অ্যাকশন লাইব্রেরিতে Run Shell Script অনুসন্ধান করুন এবং এটি যোগ করুন। অ্যাপল শেল-স্ক্রিপ্ট অ্যাকশনগুলিকে ম্যাক Shortcuts ইকোসিস্টেমের অংশ হিসেবে বর্ণনা করে, যদিও Shortcuts User Guide-এ এই অ্যাকশনটির প্রতিটি সেটিং বা সংস্করণের বিবরণ নথিভুক্ত নেই। যদি এটি আপনার অ্যাকশন লাইব্রেরিতে অনুপস্থিত থাকে, তবে Automator-এর একই নামের অ্যাকশনটি প্রতিস্থাপন করবেন না এবং এটি একইভাবে কাজ করে বলে ধরে নেবেন না; আপনার ম্যাকে উপলব্ধ অ্যাকশনগুলো পরীক্ষা করুন। Apple’s Shortcuts overview
স্ক্রিপ্ট ফিল্ডে, স্ক্রিপ্ট কমান্ডটি এক লাইনে রাখুন, তারপর ঠিক পরের লাইনে $? ক্যাপচার করুন। উদাহরণস্বরূপ, যদি স্ক্রিপ্টটি এক্সিকিউটেবল হয় এবং নিচে দেখানো উদাহরণের পাথে অবস্থিত হয়:
/Users/yourname/Scripts/refresh-files.sh >/dev/null
script_status=$?
printf '%s' "$script_status"
উদাহরণ পাথটি আপনার স্ক্রিপ্টের প্রকৃত পাথ দিয়ে প্রতিস্থাপন করুন। এই রিডাইরেকশনটি স্ক্রিপ্টের স্ট্যান্ডার্ড আউটপুটকে /dev/null-এ পাঠায়, যাতে অ্যাকশনের টেক্সট আউটপুটে কেবল স্ট্যাটাস নম্বরটি থাকে। আপনি যদি স্ক্রিপ্টের আউটপুটও পেতে চান তবে >/dev/null সরিয়ে দিন, তবে সে ক্ষেত্রে ফিরে আসা টেক্সটে সেই আউটপুট এবং স্ট্যাটাস উভয়ই অন্তর্ভুক্ত থাকতে পারে। এই রিডাইরেকশন দ্বারা স্ট্যান্ডার্ড এরর কিন্তু দমন করা হয় না।
$? অতি সম্প্রতি সম্পন্ন হওয়া কমান্ডটির এক্সিট স্ট্যাটাস ধারণ করে। এই কারণেই অ্যাসাইনমেন্টটি সরাসরি স্ক্রিপ্ট ইনভোকেশনের পরেই আসতে হবে: যদি অন্য কোনো কমান্ড আগে রান করে, তবে $? সেই কমান্ডের ফলাফল নির্দেশ করবে। printf তারপর সংরক্ষিত সংখ্যাটিকে টেক্সট হিসেবে আউটপুট দেয়, যা Shortcuts অ্যাকশন আউটপুট হিসেবে ব্যবহার করতে পারে। Apple’s Mac shell-script workflow guide
ফিরে আসা নম্বরের ওপর ভিত্তি করে ব্রাঞ্চ করুন
Run Shell Script-এর পর একটি If অ্যাকশন যোগ করুন। এর ইনপুট হিসেবে শেল অ্যাকশনের আউটপুট সেট করুন, টেক্সট কন্ডিশন হিসেবে is বেছে নিন এবং 0 লিখুন। সাফল্যের অ্যাকশনগুলি If-এর অধীনে এবং যেকোনো ব্যর্থতা হ্যান্ডলিং Otherwise-এর অধীনে রাখুন। ম্যাক Shortcuts-এর If অ্যাকশন আপনার কনফিগার করা শর্তের ওপর ভিত্তি করে কনটেন্টকে দুটি পাথের একটিতে চালিত করে। Apple’s guide to If actions in Shortcuts on Mac
ফলাফলটিকে টেক্সট হিসেবে বিবেচনা করুন কারণ শেল অ্যাকশন এটি প্রিন্ট করে। একটি সফল রান থেকে 0 ফিরে আসা উচিত; একটি অশূন্য ফলাফল অন্য ব্রাঞ্চটি গ্রহণ করবে। আপনি ব্যর্থতার ব্রাঞ্চে একটি Show Alert অ্যাকশন রাখতে পারেন এবং এর মেসেজে স্ট্যাটাসের মান অন্তর্ভুক্ত করতে পারেন, অথবা লগিংয়ের জন্য পরবর্তী কোনো অ্যাকশনে মানটি পাঠাতে পারেন। শেল স্ক্রিপ্টগুলি প্রায়শই ব্যর্থতার কারণগুলি আলাদা করতে বিভিন্ন অশূন্য মান ব্যবহার করে, তাই নম্বরটি সংরক্ষণ করা রোগ নির্ণয়ে (diagnosis) সাহায্য করতে পারে।
সাধারণ স্ট্যাটাস-চেকিং ভুলগুলি এড়িয়ে চলুন
পরবর্তী কোনো অ্যাকশনে echo $? বসিয়ে এটি পূর্ববর্তী শেল প্রসেসকে নির্দেশ করবে—এমনটা আশা করবেন না। প্রতিটি শেল অ্যাকশন নিজস্ব কমান্ড এক্সিকিউশন শুরু করে; $? একই শেল রানের ভেতরে এবং আপনি যে কমান্ডের স্ট্যাটাস চান তার ঠিক পরেই অর্থপূর্ণ হয়। একইভাবে, স্ক্রিপ্টটি রান করার আগে কোনো স্ট্যাটাস প্রিন্ট করলে কেবল পূর্বে যা রান করা হয়েছিল তার ফলাফলই প্রিন্ট হবে।
স্ক্রিপ্টটি যদি একাধিক কমান্ড সম্পাদন করে, তবে এর চূড়ান্ত এক্সিট স্ট্যাটাস নির্ভর করতে পারে স্ক্রিপ্টটি কীভাবে লেখা হয়েছে তার ওপর। উদাহরণস্বরূপ, স্ক্রিপ্টটি ইচ্ছাকৃতভাবে সেই ব্যর্থতা প্রপাগেট বা হ্যান্ডেল না করলে, পরবর্তী একটি সফল কমান্ড পূর্ববর্তী কোনো ব্যর্থতাকে ঢেকে দিতে পারে। শর্টকাট শুধুমাত্র সেই স্ট্যাটাসের ওপর ব্রাঞ্চ করতে পারে যা স্ক্রিপ্ট শেষ পর্যন্ত ফেরত দেয়। ফলাফলটি যদি আপনার কাঙ্ক্ষিত ধাপটি প্রতিফলিত না করে, তবে স্ক্রিপ্টের নিজস্ব এরর হ্যান্ডলিং পর্যালোচনা করুন।
যখন আপনি Terminal থেকে কোনো শর্টকাট রান করেন
আপনার লক্ষ্য যদি হয় টার্মিনাল থেকে পুরো শর্টকাটটি সফলভাবে রান করেছে কি না তা পরীক্ষা করা, তবে অ্যাপল একটি পৃথক shortcuts কমান্ডের নথি প্রদান করে: shortcuts run "Shortcut Name"। শর্টকাট রান সফল হলে সেই কমান্ডটি 0 এবং ত্রুটি হলে 1 এক্সিট স্ট্যাটাস দেয়। এটি হলো শর্টকাট ইনভোকেশন-এর স্ট্যাটাস, অভ্যন্তরীণ শেল অ্যাকশনের এক্সিট কোড ধারণকারী কোনো ডেডিকেটেড ভেরিয়েবল নয়। শর্টকাট ব্রাঞ্চে স্ক্রিপ্টের নিজস্ব স্ট্যাটাস ব্যবহার করতে, উপরে বর্ণিত পদ্ধতি অনুসারে শেল অ্যাকশনের ভেতরেই এটি ক্যাপচার এবং প্রিন্ট করুন। Apple’s command-line guide for Shortcuts on Mac
ব্যবহারিক প্যাটার্নটি সহজ: স্ক্রিপ্ট রান করুন, অবিলম্বে $? সংরক্ষণ করুন, সেই সংরক্ষিত মানটি প্রিন্ট করুন এবং একটি If অ্যাকশনে প্রাপ্ত টেক্সটটিকে 0-এর সাথে তুলনা করুন। এটি ম্যাক শর্টকাটকে একটি স্পষ্ট সাফল্যের পথ এবং ব্যর্থতার পথ দেয় এবং সিদ্ধান্তটিকে স্ক্রিপ্টের প্রকৃত এক্সিট ফলাফলের সাথে আবদ্ধ রাখে।
সূত্রসমূহ
Get More Done With Shortcuts! — Apple
Use a shell script action in an Automator workflow on Mac — Apple Support
Use If actions in Shortcuts on Mac — Apple Support
Run shortcuts from the command line — Apple Support