البداية · فصل ١

الشيل بيقرأ السطر إزاي؟

terminal · shell · bash · PATH · process
🎯 الهدف: تفرّق التيرمينال عن الشيل، وتعرف إن الشيل برنامج بيقطع السطر ويشغّل برامج تانية.

التيرمينال نافذة، الشيل اللي سامع

الـ terminal برنامج بيرسم الشباك ويستقبل الكيبورد. الـ shell البرنامج اللي جوه، بيقرأ السطر وينفّذه. أشهرهم على Linux هو bash. في كمان zsh و sh. الشكل قريب، والتفاصيل بتفرق لما تكتب سكربت.

السطر اللي مستنيك اسمه الـ prompt. بتكتب أمر وتضغط Enter. الشيل يخلّص، ويطلّع prompt جديد. مفيش prompt جديد يعني الأمر لسه شغال.

السطر مش بيتنفّذ كجملة واحدة

الشيل بيقص السطر لكلمات. أول كلمة اسم البرنامج. الباقي حجج (arguments) بتوصّله. الشيل بيدوّر على البرنامج في قائمة فولدرات اسمها PATH، إلا لو كتبت مسار فيه / زي ./script.sh.

terminal
ls -la /tmp# ls     = البرنامج# -la    = خيار (option)# /tmp   = حجة: المسار اللي يتلسّط

ls مش جزء من الشيل في العادة. ده برنامج لوحده. الشيل لقاه، شغّله، واستناه يخلّص، وبعدين رجّع لك الـ prompt. البرامج دي اسمها أوامر خارجية. في أوامر مبنية جوه الشيل نفسه زي cd و export، لأن لازم تغيّر حالة الشيل مش برنامج ابن هيموت ويرجع.

الشيل مش بينفّذ “اللينكس”. بيلاقي برنامج، يشغّله، ويستنى رقمه يرجع.

الرقم ده الـ exit code. صفر يعني تمام. أي رقم تاني يعني فشل. هنبني عليه && و || في فصل الفاصل.

تفاعلي ولا سكربت

لما بتكتب بإيدك، الشيل تفاعلي: فيه prompt وتاريخ (history) وإكمال بـ Tab. لما تحط الأوامر في ملف وتشوّره، الشيل بيقرأ الملف سطر سطر من غير ما يستناك. نفس القواعد تقريبًا، بس مفيش حد يصلّح الغلطة في نصها.

تفاعلي

تجربة، تنقّل، أمر مرة واحدة. الغلط رخيص لأنك شايف الناتج فورًا.

سكربت

نفس الأوامر، بتتكرر. الغلط غالي لأن الملف ممكن يتمسح وهو نايم. عشان كده التنصيص و set -euo pipefail مش ترف.

تلات مفاتيح هتتعود عليهم

Ctrl+C — اقطع الأمر الشغال (SIGINT)Ctrl+D — نهاية الإدخال، ولو السطر فاضي الشيل يقفلCtrl+Z — وقّف الأمر مؤقتًا ورجّع الـ prompt (وبعدين fg يكمّله)

Tab بيكمّل أسماء الملفات والأوامر. السهم لفوق يرجّع آخر أمر. Ctrl+R يدوّر في التاريخ. دول مش أوامر، دول الشيل وهو لسه سامعك.

خلّصت الفصل لما

🧠 اختبر نفسك
١) ls مبني جوه bash ولا برنامج لوحده؟
برنامج لوحده. الشيل بيدوّر عليه في PATH ويشغّله.
٢) ليه cd مش برنامج عادي؟
لأن لازم يغيّر الفولدر بتاع الشيل نفسه. برنامج ابن يغيّر فولدره ويموت من غير ما يأثر عليك.
٣) exit code بصفر معناه إيه؟
الأمر خلّص تمام. غير الصفر يعني فشل.