إذا كنت تريد معرفة البرنامج الذي سيقوم اسم أمر معين بتشغيله في جلستك الحالية على الوحدة الطرفية (Terminal) في Mac، فاسأل zsh أولاً عن كيفية تفسيره لهذا الاسم، ثم ابحث في PATH عن الملفات القابلة للتنفيذ. هذا الأمر مهم لأن الأمر قد يشير إلى اسم مستعار (alias) أو دالة shell قبل أن تصل الـ shell إلى الملف. في macOS، تكون الـ shell الافتراضية للوحدة الطرفية هي zsh، على الرغم من أن ملف تعريف Terminal أو المسؤول يمكنه تحديد shell أخرى. دليل Apple للوحدة الطرفية (Terminal)

اسأل zsh عما يعنيه اسم الأمر

في Terminal، قم بتشغيل whence -v متبوعاً باسم الأمر، دون وسائط تؤدي إلى تنفيذه. على سبيل المثال:

whence -v python3

تحدد المخرجات نوع الأمر الذي ستستخدمه zsh: قد تشير إلى أنه اسم مستعار (alias)، أو دالة (function)، أو أمر مدمج (builtin)، أو أمر خارجي (external command). وإذا أشارت إلى اسم مستعار أو دالة، فإن الاسم لا يحدد بشكل مباشر الملف القابل للتنفيذ الذي سيتم تشغيله؛ فقد يتوسع الاسم المستعار أو الدالة إلى أمر آخر أو يشغل عدة أوامر. يوثق zsh الأمر whence كطريقة للإبلاغ عن كيفية تفسير الاسم. توثيق أوامر zsh المدمجة (Shell Builtins)

للحصول على تصنيف نوع موجز، استخدم:

whence -w python3

إذا كانت النتيجة function، فافحص التعريف باستخدام functions python3. وإذا كانت alias، فافحصه باستخدام alias python3. تعرض هذه الأوامر تعريف الـ shell الحالي؛ ولا تقوم بتنفيذ الهدف. قد تستدعي الدالة دالة أخرى أو برنامجاً خارجياً، لذا تتبع التعريف حتى تصل إلى الأمر الذي يؤدي العمل الفعلي.

العثور على الملفات القابلة للتنفيذ في PATH

للعثور على الملف الذي ستحدده zsh عبر PATH، حتى عندما يحجب اسم مستعار أو دالة الاسم، استخدم:

whence -p python3

لسرد كل إدخال مطابق في PATH، استخدم:

whence -pa python3

يطلب الخيار -p من zsh البحث في PATH بصرف النظر عن وجود تعريف على مستوى الـ shell، بينما يبلغ الخيار -a عن جميع التطابقات بدلاً من الأول فقط. أول تطابق في PATH هو الملف القابل للتنفيذ الذي ستجده zsh للبحث العادي عن أمر خارجي. يمكن لـ zsh أيضاً إظهار كيفية حل الرابط الرمزي (symbolic link) باستخدام whence -ps python3. توثيق أوامر zsh المدمجة (Shell Builtins)

تنتمي قائمة PATH إلى بيئة الـ shell الحالية. اطلع على أدلتها باستخدام print -r -- $PATH؛ حيث تقدم zsh معامل path الخاص بها كقيمة مفصولة بنقطتين رأسيتين بهذا الشكل. يمكن أن يؤدي أي تغيير في ترتيب PATH إلى تغيير الاسم المكرر الذي يتم العثور عليه أولاً. تصف Apple المتغير PATH بأنه قائمة بالأدلة التي تبحث فيها الـ shell عن الأوامر، وتلاحظ أن إعدادات بيئة الـ shell خاصة بسياق التنفيذ الخاص بها. Apple: استخدام متغيرات البيئة في "الوحدة الطرفية" على الـ Mac

التحقق من كيفية استدعاء الأمر

الأمر المكتوب بشرطة مائلة، مثل ./python3 أو /opt/tools/python3، يحدد مساراً بدلاً من مطالبة الـ shell بالبحث في PATH عن الاسم. المسار النسبي ./python3 يعني ملفاً في الدليل الحالي. يوضح الدليل التمهيدي لسطر الأوامر من Apple أن الاسم الخالي من شرطة مائلة بادئة يكون نسبياً بالنسبة للدليل الحالي عند استخدامه كمسار، وأن ./ تقوم بتشغيل برنامج من الدليل الحالي بشكل صريح. Apple: الدليل التمهيدي لسطر الأوامر (Command Line Primer)

بالنسبة للاسم البسيط مثل python3، افحص كلاً من نوع الـ shell وتطابقات PATH. أما بالنسبة للمسار الذي يحتوي على /، فافحص هذا الملف بعينه. ضع المسارات التي تحتوي على مسافات أو رموز خاصة بالـ shell (metacharacters) بين علامات اقتباس عند تشغيلها؛ على سبيل المثال، "/Applications/Tool Folder/tool". يوثق دليل Apple وضع علامات اقتباس أو استخدام محارف الهروب (escaping) للرموز الخاصة في المسارات. يؤدي هذا إلى تحديد موقع الملف المستدعى دون تغيير كيفية تشغيل الأمر.

معرفة ما لا يمكن لعملية البحث هذه إثباته

تصف عملية البحث كيفية تفسير الـ shell الحالية للأمر، وليس كل سياق تنفيذ. يمكن أن يكون لنافذة Terminal أخرى متغير PATH أو إعداد shell مختلف، وقد يتصرف الأمر بشكل مختلف في برنامج نصي (script)، أو shell أخرى، أو تطبيق تم تشغيله خارج Terminal. تلاحظ Apple أن نوافذ Terminal لا تشترك في بيئات الـ shell. Apple: استخدام متغيرات البيئة في "الوحدة الطرفية" على الـ Mac

بالإضافة إلى ذلك، فإن العثور على اسم مسار لا يثبت بحد ذاته أنه العملية التي تم استخدامها في النهاية في كل حالة: فقد يكون الملف رابطاً رمزياً، أو نصاً برمجياً يبدأ برنامجاً آخر، أو مشغلاً (launcher). يمكن للأمر whence -ps الكشف عن حل الرابط الرمزي، ولكن تتبع السلوك الإضافي لبرنامج نصي يتطلب فحص ذلك البرنامج النصي أو وثائق البرنامج. إذا لم يرجع whence -p أي مسار، فهذا يعني أن هذا الاسم ليس له تطابق في PATH في هذه الـ shell؛ ومع ذلك يمكن أن يظل اسماً مستعاراً، أو دالة، أو أمراً مدمجاً، أو أمراً متاحاً فقط عبر مسار صريح.

لإجراء فحص روتيني، شغّل whence -v name أولاً، وافحص أي اسم مستعار أو دالة، ثم استخدم whence -pa name لمقارنة العناصر المرشحة القابلة للتنفيذ. يجيب هذا التسلسل عن كلٍ من: ما الذي تتعرف عليه zsh وما الملف الذي سيجده بحث PATH الخاص بها.

المصادر