আপনার বর্তমান Mac টার্মিনাল সেশনে একটি কমান্ড নাম কোন প্রোগ্রামটি চালাবে তা যদি আপনি জানতে চান, তবে প্রথমে zsh-কে জিজ্ঞাসা করুন এটি সেই নামটিকে কীভাবে ব্যাখ্যা করে, তারপর এক্সিকিউটেবল ফাইলের জন্য PATH খুঁজুন। এটি গুরুত্বপূর্ণ কারণ শেল কোনো ফাইলে পৌঁছানোর আগেই একটি কমান্ড অ্যালিয়াস বা শেল ফাংশন হিসেবে সমাধান হতে পারে। macOS-এ টার্মিনালের ডিফল্ট শেল হলো zsh, যদিও কোনো টার্মিনাল প্রোফাইল বা অ্যাডমিনিস্ট্রেটর অন্য শেল নির্বাচন করতে পারেন। Apple-এর টার্মিনাল গাইড

zsh-কে জিজ্ঞাসা করুন কমান্ডের নামের অর্থ কী

টার্মিনালে, কমান্ড নামটি দিয়ে whence -v চালান, এমন কোনো আর্গুমেন্ট ছাড়া যা এটিকে এক্সিকিউট করে ফেলবে। উদাহরণস্বরূপ:

whence -v python3

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

সংক্ষিপ্ত টাইপ লেবেলের জন্য, ব্যবহার করুন:

whence -w python3

ফলাফলটি যদি function হয়, তবে functions python3 দিয়ে এর সংজ্ঞা পরীক্ষা করুন। এটি যদি alias হয়, তবে alias python3 দিয়ে এটি পরীক্ষা করুন। এই কমান্ডগুলি বর্তমান শেল সংজ্ঞা প্রদর্শন করে; এগুলি টার্গেটকে এক্সিকিউট করে না। একটি ফাংশন অন্য কোনো ফাংশন বা বাহ্যিক প্রোগ্রামকে কল করতে পারে, তাই যতক্ষণ না আপনি আসল কাজটি সম্পাদনকারী কমান্ডটিতে পৌঁছাচ্ছেন ততক্ষণ সংজ্ঞাটি অনুসরণ করুন।

PATH-এ এক্সিকিউটেবল ফাইল খুঁজুন

কোনো অ্যালিয়াস বা ফাংশন নামটিকে আড়াল করে রাখলেও, PATH-এর মাধ্যমে zsh যে ফাইলটি খুঁজে পাবে তা বের করতে ব্যবহার করুন:

whence -p python3

প্রতিটি ম্যাচিং PATH এন্ট্রি তালিকাভুক্ত করতে, ব্যবহার করুন:

whence -pa python3

-p অপশনটি শেল-স্তরের কোনো সংজ্ঞা থাকা সত্ত্বেও zsh-কে PATH অনুসন্ধান করতে বলে, এবং -a শুধুমাত্র প্রথমটির পরিবর্তে সমস্ত মিল রিপোর্ট করে। প্রথম PATH মিলটি হলো সেই এক্সিকিউটেবল ফাইল যা zsh একটি সাধারণ এক্সটার্নাল-কমান্ড লুকআপের জন্য খুঁজে পাবে। zsh whence -ps python3-এর মাধ্যমে একটি সিম্বলিক লিঙ্ক কীভাবে কাজ করে তাও দেখাতে পারে। zsh শেল বিল্টইন ডকুমেন্টেশন

PATH তালিকাটি বর্তমান শেল এনভায়রনমেন্টের অন্তর্ভুক্ত। print -r -- $PATH দিয়ে এর ডিরেক্টরিগুলি দেখুন; zsh এই ফর্মে তার path প্যারামিটারটিকে কোলন দ্বারা পৃথক করা মান হিসেবে উপস্থাপন করে। PATH-এর ক্রম পরিবর্তনের ফলে ডুপ্লিকেট নামের ক্ষেত্রে কোনটি আগে পাওয়া যাবে তা পরিবর্তিত হতে পারে। Apple PATH-কে ডিরেক্টরিগুলির একটি তালিকা হিসেবে বর্ণনা করে যেখানে শেল কমান্ডের জন্য অনুসন্ধান করে, এবং উল্লেখ করে যে শেল এনভায়রনমেন্ট সেটিংস তাদের এক্সিকিউশন কনটেক্সটের জন্য নির্দিষ্ট। Apple: Use environment variables in Terminal on Mac

কমান্ডটি কীভাবে ইনভোক করা হয়েছিল তা পরীক্ষা করুন

স্ল্যাশ দিয়ে লেখা একটি কমান্ড, যেমন ./python3 বা /opt/tools/python3, শেলকে নামের জন্য PATH অনুসন্ধান করতে বলার পরিবর্তে একটি নির্দিষ্ট পাথ উল্লেখ করে। রিলেটিভ পাথ ./python3 বলতে বর্তমান ডিরেক্টরিতে থাকা একটি ফাইলকে বোঝায়। Apple-এর কমান্ড-লাইন প্রাইমার ব্যাখ্যা করে যে একটি পাথ হিসেবে ব্যবহার করার সময় শুরুর স্ল্যাশহীন নাম বর্তমান ডিরেক্টরির সাপেক্ষ হয়, এবং ./ স্পষ্টভাবে একটি বর্তমান-ডিরেক্টরির প্রোগ্রাম চালায়। Apple: Command Line Primer

python3-এর মতো একটি সাধারণ নামের জন্য, এর শেল টাইপ এবং PATH ম্যাচ উভয়ই পরীক্ষা করুন। / যুক্ত পাথের ক্ষেত্রে, ঠিক সেই ফাইলটি পরীক্ষা করুন। স্পেস বা শেল মেটাক্যারেক্টার যুক্ত পাথগুলি চালানোর সময় উদ্ধৃতি চিহ্নের (quote) মধ্যে রাখুন; উদাহরণস্বরূপ, "/Applications/Tool Folder/tool"। Apple-এর প্রাইমার পাথের মধ্যে বিশেষ ক্যারেক্টারগুলিকে উদ্ধৃত বা এস্কেপ করার বিষয়ে তথ্য দেয়। এটি কমান্ড কীভাবে চালানো হয় তা পরিবর্তন না করেই ইনভোক করা ফাইলটিকে খুঁজে বের করে।

এই লুকআপ কী প্রমাণ করতে পারে না তা জানুন

একটি লুকআপ বর্তমান শেলের সমাধানকে বর্ণনা করে, প্রতিটি এক্সিকিউশন কনটেক্সটকে নয়। অন্য একটি টার্মিনাল উইন্ডোতে ভিন্ন PATH বা শেল সেটআপ থাকতে পারে, এবং কোনো স্ক্রিপ্ট, অন্য কোনো শেল বা টার্মিনালের বাইরে চালু হওয়া কোনো অ্যাপ্লিকেশনে একটি কমান্ড ভিন্ন আচরণ করতে পারে। Apple উল্লেখ করে যে টার্মিনাল উইন্ডোগুলি শেল এনভায়রনমেন্ট শেয়ার করে না। Apple: Use environment variables in Terminal on Mac

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

একটি নিয়মিত পরীক্ষার জন্য, প্রথমে whence -v name চালান, যেকোনো অ্যালিয়াস বা ফাংশন পরীক্ষা করুন, তারপর এক্সিকিউটেবল প্রার্থীগুলির তুলনা করতে whence -pa name ব্যবহার করুন। এই অনুক্রমটি zsh কী চেনে এবং এর PATH অনুসন্ধান কোন ফাইলটি খুঁজে পাবে—উভয় প্রশ্নেরই উত্তর দেয়।

উৎসসমূহ