আপনি যদি আপনার ম্যাকের টার্মিনালে একটি ছোট কমান্ড বারবার ব্যবহার করেন, তবে একটি এলিয়াসই যথেষ্ট হতে পারে। কাজটি সম্পাদনে যদি আর্গুমেন্ট, একাধিক ধাপ, সিদ্ধান্ত গ্রহণ বা আপনার ইন্টারঅ্যাক্টিভ শেলের বাইরে ব্যবহারের প্রয়োজন হয়, তবে একটি স্ক্রিপ্ট লিখুন। মাঝামাঝি কোনো পরিস্থিতির জন্য—বিশেষ করে এমন কোনো কমান্ড যার আর্গুমেন্টের প্রয়োজন হয় কিন্তু বর্তমান শেলের ডিরেক্টরি পরিবর্তন করা দরকার—সেক্ষেত্রে একটি zsh ফাংশন ব্যবহারের কথা বিবেচনা করুন। কমান্ডটিকে কী করতে হবে এবং কোথায় এটি কাজ করাতে হবে তার ওপর ভিত্তি করে সঠিকটি বেছে নিতে এই নির্দেশিকাটি আপনাকে সাহায্য করবে।

ম্যাকওএসে একটি এলিয়াস যা করে

একটি এলিয়াস হলো একটি সংক্ষিপ্ত নাম, যা টাইপ করার সাথে সাথে zsh এটিকে সম্পূর্ণ কমান্ড টেক্সটে প্রসারিত করে। উদাহরণস্বরূপ, আপনি যদি প্রায়ই git status রান করেন, তবে আপনি ~/.zshrc-এ alias gs='git status' যোগ করতে পারেন। অ্যাপল zsh-কে টার্মিনালের ডিফল্ট শেল হিসেবে নথিভুক্ত করেছে, যদিও ম্যাকের শেল পরিবর্তন করা সম্ভব, তাই কোনো এলিয়াস অপ্রত্যাশিত আচরণ করলে আপনার সেটআপ পরীক্ষা করে নিন। অ্যাপলের টার্মিনাল নির্দেশিকা

প্রতিস্থাপনটি যখন মূলত নির্দিষ্ট বা অপরিবর্তনশীল হয় তখন একটি এলিয়াস ব্যবহার করুন: একটি সংক্ষিপ্ত বানান, একটি স্ট্যান্ডার্ড অপশন, বা একটি সাধারণ কমান্ড যা আপনি ইন্টারঅ্যাক্টিভভাবে রান করেন। এটি সম্পাদনা করা বা মুছে ফেলা সহজ, এবং আপনি যখন এর সংজ্ঞা পরীক্ষা করেন তখন সম্পূর্ণ কাজটি স্পষ্ট দেখা যায়। zsh-এ, এলিয়াসগুলো প্যারামিটার হিসেবে আর্গুমেন্ট গ্রহণ করে না; এগুলো কেবল টেক্সট প্রতিস্থাপন করে। এর ফলে কোনো প্রক্রিয়ার মধ্যে পাথ বা অন্য কোনো পরিবর্তনশীল মান পাস করার প্রয়োজন হলে এলিয়াস উপযুক্ত সমাধান নয়। এলিয়াস সংক্রান্ত Zsh ব্যবহারকারী নির্দেশিকা

এলিয়াসগুলো শেল পার্সিং এবং শুরুর (স্টার্টআপ) সাথেও যুক্ত। ~/.zshrc থেকে লোড করা একটি সংজ্ঞা একটি ইন্টারঅ্যাক্টিভ টার্মিনাল সেশনে কার্যকর, কিন্তু অন্য কোনো প্রোগ্রাম, নন-ইন্টারঅ্যাক্টিভ শেল বা স্ক্রিপ্ট সেই ফাইলটি পড়বে এবং এলিয়াসটি চিনবে—এমনটা ধরে নেওয়া উচিত নয়। কমান্ডটি যদি বিভিন্ন প্রেক্ষাপট থেকে নির্ভরযোগ্যভাবে কল করার প্রয়োজন হয়, তবে একটি স্ক্রিপ্ট বা অন্য কোনো স্পষ্ট কমান্ড ইন্টারফেস ব্যবহার করুন।

স্ক্রিপ্ট কখন বেশি উপযুক্ত

বারবার ব্যবহৃত কাজটি যদি কোনো নির্দিষ্ট কমান্ড না হয়ে একটি ছোট প্রক্রিয়া হয়, তবে একটি স্ক্রিপ্ট বেছে নিন। এর লক্ষণগুলোর মধ্যে রয়েছে একাধিক ধাপ, আর্গুমেন্ট, শর্ত যাচাই (চেক), ব্রাঞ্চিং, স্পষ্ট সাফল্য বা ব্যর্থতার আচরণ, অথবা কোনো পাথ বা অন্য কোনো টুল থেকে এটি চালু করার প্রয়োজন। অ্যাপল শেল স্ক্রিপ্টকে কমান্ড-লাইন টুলগুলো একত্রিত করার, আর্গুমেন্ট পরিচালনা করার এবং ফলাফল কোডের ওপর ভিত্তি করে সিদ্ধান্ত নেওয়ার একটি উপায় হিসেবে বর্ণনা করে। শেল স্ক্রিপ্টগুলোতে উপভাষাগত (dialect) পার্থক্যও রয়েছে, তাই প্রতিটি শেল একই সিনট্যাক্স পড়তে পারে—এমনটা ধরে না নিয়ে ইন্টারপ্রেটার বেছে নিন এবং তা উল্লেখ করে রাখুন। অ্যাপলের শেল স্ক্রিপ্টিং প্রাইমার

উদাহরণস্বরূপ, কোনো রুটিন যদি ইনপুট হিসেবে একটি প্রজেক্ট ফোল্ডার গ্রহণ করে, সেটি বিদ্যমান কিনা তা যাচাই করে, এবং তারপর সেখানে একই ধারা চালু করে, তবে একটি স্ক্রিপ্ট সেই ইনপুটটিকে স্পষ্ট করতে পারে এবং ধাপগুলোকে একটি পঠনযোগ্য ক্রমে সাজাতে পারে। ফাইল মুছে ফেলা বা ওভাররাইট করার মতো পরিবর্তনগুলো স্বয়ংক্রিয় করার আগে, চেক যোগ করুন এবং ব্যর্থতার আচরণ স্পষ্ট করুন। একটি শেল স্ক্রিপ্ট নিজস্ব এক্সিকিউশন কনটেক্সটে একটি কমান্ড হিসেবে রান করে; এর ভেতরে ডিরেক্টরি পরিবর্তন করলে তা কলিং টার্মিনাল শেলের ডিরেক্টরি পরিবর্তন করবে—এমনটা আশা করা উচিত নয়। Zsh কলিং শেলে ফাংশন এক্সিকিউশন থেকে স্ক্রিপ্ট কমান্ড এক্সিকিউশনকে আলাদাভাবে নথিভুক্ত করে। Zsh কমান্ড এক্সিকিউশন

একটি স্ক্রিপ্ট এমনিতেই অধিক নিরাপদ বা সহজে বহনযোগ্য (portable) হয় না। এটি রক্ষণাবেক্ষণ করার মতো আরেকটি অতিরিক্ত ফাইল, এবং এর আচরণ নির্ভর করে এর ইন্টারপ্রেটার, ম্যাকে উপলব্ধ কমান্ড, পারমিশন এবং পাথ বা ইনপুট সম্পর্কিত ধারণার ওপর। অ্যাপলের প্রাইমার বিশেষভাবে সতর্ক করে যে শেলের উপভাষা এবং প্ল্যাটফর্ম ইউটিলিটির পার্থক্য ব্যর্থতার কারণ হতে পারে। স্ক্রিপ্টগুলোকে নির্দিষ্ট কাজের মধ্যে সীমাবদ্ধ রাখুন, যেখানে উপযুক্ত সেখানে ভেরিয়েবল এক্সপ্যানশনে উদ্ধৃতি চিহ্ন (কোট) ব্যবহার করুন এবং মূল্যবান ডেটাতে ব্যবহারের আগে নিরাপদ নমুনা ইনপুট দিয়ে সেগুলো পরীক্ষা করুন।

মাঝামাঝি পরিস্থিতির জন্য একটি zsh ফাংশন ব্যবহার করুন

আপনার বর্তমান টার্মিনাল শেলে যদি পুনরায় ব্যবহারযোগ্য লজিক এবং আর্গুমেন্টের প্রয়োজন হয়, কিন্তু কোনো স্বতন্ত্র ফাইলের প্রয়োজন না থাকে, তবে একটি ফাংশন প্রায়শই সেরা পছন্দ। উদাহরণস্বরূপ, একটি ফাংশন একটি ডিরেক্টরি আর্গুমেন্ট গ্রহণ করতে পারে, এটি যাচাই করতে পারে এবং তারপর এতে cd করতে পারে; যেহেতু zsh ফাংশনগুলো কলকারীর শেল প্রসেসেই রান করে, তাই সেই ডিরেক্টরি পরিবর্তনটি ইন্টারঅ্যাক্টিভ সেশনে বজায় থাকে। Zsh নথিভুক্ত করেছে যে ফাংশনগুলো আর্গুমেন্ট গ্রহণ করে এবং কলকারীর একই প্রসেসে নির্বাহ (execute) হয়। Zsh ফাংশনসমূহ

ইন্টারঅ্যাক্টিভ টার্মিনাল সেশনে কোনো ফাংশন উপলব্ধ রাখতে চাইলে তা ~/.zshrc-এ সংজ্ঞায়িত করুন। কাজটি যখন একটি পৃথক কমান্ড হিসেবে চলা উচিত, অন্যান্য টুল বা স্ক্রিপ্ট দ্বারা কল করার প্রয়োজন হয়, অথবা ফাইল হিসেবে শেয়ার করা সহজতর করতে চান—তখন স্ক্রিপ্টকে অগ্রাধিকার দিন। আর যখন আপনি কেবল একটি নির্দিষ্ট কমান্ড লাইনের জন্য একটি স্মরণীয় নাম চান, তখন এলিয়াসকে অগ্রাধিকার দিন।

দ্রুত সিদ্ধান্ত নেওয়ার পরীক্ষা

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

তারপর যাচাই করুন কমান্ডটি আপনার কোথায় প্রয়োজন। কেবল টার্মিনালে? ~/.zshrc-এ একটি এলিয়াস বা ফাংশন উপযুক্ত হতে পারে। আলাদাভাবে চালু করার মতো কোনো কমান্ড? উপযুক্ত ইন্টারপ্রেটার এবং সুচিন্তিত পারমিশনসহ একটি স্ক্রিপ্ট ব্যবহার করুন। অন্য কোনো ম্যাকের সাথে শেয়ার করবেন? পূর্বশর্ত এবং প্রয়োজনীয় টুলগুলো উল্লেখ করে রাখুন; একটি শেল স্ক্রিপ্ট টার্মিনালে চলে বলেই যে তা স্বয়ংক্রিয়ভাবে পোর্টেবল হয়ে যাবে, এমন নয়।

কাজের ইন্টারফেসটিই হলো প্রধান বিভাজন রেখা: এলিয়াস নির্দিষ্ট কমান্ড টেক্সটের নাম পরিবর্তন করে, ফাংশন বর্তমান শেলের ভেতরে পুনরায় ব্যবহারযোগ্য আচরণ যোগ করে, এবং স্ক্রিপ্ট একটি প্রক্রিয়াকে পৃথক কমান্ড হিসেবে প্যাকেজ করে। আপনার প্রয়োজন মেটায় এমন সবচেয়ে সহজ বিকল্প দিয়ে শুরু করুন, এবং আর্গুমেন্ট, লজিক বা কমান্ডটি কোথায় রান করতে হবে তার কারণে এলিয়াস ব্যবহার করা জটিল মনে হলে ফাংশন বা স্ক্রিপ্টে স্থানান্তরিত হন।

উৎসসমূহ