مُقارنة بين Zsh و Bash: اختيار واجهة الأوامر (Shell) المُناسبة للبرمجة وإدارة النصوص

عندما يتعلق الأمر بالبرمجة وإدارة النصوص في أنظمة التشغيل المشابهة لـ Unix و Linux، يتعين عليك اختيار الأداة المُناسبة للعمل. هنا نتحدث عن واجهة الأوامر (Shell)، وهناك اثنان من أكثر الخيارات الشائعة استخدامًا: Zsh (Z Shell) و Bash (Bourne Again Shell). في هذا المقال، سنقوم بتفصيل المُميزات والاختلافات بينهما ونُقدم نصائح حول كيفية اختيار الأنسب لاحتياجاتك.  إذا كنت مبرمجًا أو مسؤول نظام، فإنَّ الاختيار بين هاتين الواجهتين سيُؤثر بشكل كبير على كفاءتك وإنتاجيتك. سيٌساعدك فهم الاختلافات والتشابهات بينما على تحسين سير عمل سطر الأوامر لديك. إنَّ معرفة الفروق الدقيقة في كل واجهة سيُساعدك على اتخاذ قرارات مُستنيرة.

من ميزات Zsh الرائعة مثل الإكمال التلقائي المُتقدم وسهولة التخصيص إلى توافق Bash الواسع والشعبية الكبيرة، سنُساعدك في فهم ميزات كل منهما وكيفية استخدامها لجعل تجربتك في برمجة النصوص وإدارتها أفضل. بغض النظر عن مجال عملك، ستجد هذا المقال مُفيدًا لاتخاذ القرار الصائب بشأن الواجهة التي تُناسب احتياجاتك. تحقق من بدائل ChatGPT المُتقدمة التي تُوفر إمكانية برمجة التطبيقات تلقائيًا.

مُقارنة بين Zsh و Bash: اختيار واجهة الأوامر (Shell) المُناسبة للبرمجة وإدارة النصوص - شروحات

ما هي Bash و Zsh؟

تحظى Bash بشعبية كبيرة على أنظمة Linux و macOS. إنها أداة قوية يُمكنك استخدامها للتفاعل مع نظام التشغيل وتنفيذ الأوامر. يُمكنك أيضًا استخدام Bash للبرمجة النصية لـ Shell، والتي تعمل على أتمتة المهام عن طريق كتابة نصوص برمجية تحتوي على أكثر من أمر واحد.

Zsh (Z shell) هي نسخة موسعة من Bash تحتوي على العديد من الميزات. إنها الواجهة الافتراضية على macOS. كما أنها أصبحت ذات شعبية مُتزايدة على أنظمة Linux.

كيفية التبديل من Bash إلى Zsh

إذا كنت تستخدم نظام Linux وترغب في التبديل إلى Zsh، فابدأ باستخدام مدير الحزم لتثبيتها. على سبيل المثال، في توزيعة Debian أو Ubuntu، استخدم الأمر التالي:

sudo apt install zsh

بعد تثبيتها على نظامك، قم بالتبديل إليها عن طريق تنفيذ الأمر التالي:

chsh -s $(which zsh)

إذا كنت تستخدم macOS، فهذا يعني أنَّ Zsh مُثبتة بالفعل. للتبديل إليها قم بتنفيذ الأمر التالي:

chsh -s /bin/zsh

للتبديل مرة أخرى إلى Bash، استبدل Zsh بـ Bash في الأوامر المذكورة أعلاه.

للتحقق من Shell التي تستخدمها، قم بتشغيل الأمر التالي:

echo $SHELL

سيEساعدك هذا على التأكد من أنك تستخدم الواجهة التي تنوي استخدامها.

الاختلافات بين Zsh و Bash

هناك عدة اختلافات بين Zsh و Bash. سيُساعدك النظر في هذه الاختلافات في تحديد واجهة Shell التي تناسبك بشكل أفضل.

1. التخصيص الفوري

تُوفر Zsh طريقة أسهل لتخصيص المُطالبات التي تُدخلها باستخدام التسلسلات المُستندة إلى %. وهذا يسمح بمطالبات ديناميكية بالألوان والمعلومات. لتخصيص مُطالبة Shell الخاصة بك، حدد PS1 (المُطالبة الأساسية).

PS1="%F{green}%n@%m %F{blue}%~ %f$ "

تعرض المُطالبة المُخصصة أعلاه اسم المستخدم واسم المُضيف والدليل الحالي بألوان مختلفة:

مُقارنة بين Zsh و Bash: اختيار واجهة الأوامر (Shell) المُناسبة للبرمجة وإدارة النصوص - شروحات

هناك العديد من الطرق الأخرى لتخصيص مُطالبة Zsh، مما يُتيح لك تعيين مؤشر إداري، وتضمين التاريخ والوقت، وحفظ المُطالبة الجديدة.

تستخدم Bash أسلوبًا مختلفًا بعض الشيء عندما يتعلق الأمر بالتخصيص السريع. وتستخدم رموز الهروب لتحديد تغييرات اللون والتنسيق في المُطالبة. لتحقيق نفس التخصيص مثل Zsh أعلاه، يمكنك استخدام المُطالبة المُخصصة التالية.

PS1="\[\033[32m\]\u@\h \[\033[34m\]\w \[\033[0m\]\$ "

يُعد استخدام \[\033[0m\] أمرًا بالغ الأهمية لأنه يضمن أن تغييرات اللون لا تُؤثر على النص الذي يتبع المطالبة.

2. دعم المصفوفات الترابطية

تدعم Zsh أصلاً المصفوفات الترابطية. تُوفر هذه المصفوفات طريقة ملائمة لربط البيانات مما يجعل من السهل تنظيم المعلومات واسترجاعها. استخدم الأمر المُعلن -A للإعلان بشكل صريح عن مصفوفة ترابطية:

# Declare an associative array in Zsh 
declare -A my_assoc_array

يُمكنك بعد ذلك تعيين قيم للمصفوفة الترابطية:

my_assoc_array=(key1 value1 key2 value2)

وأخيرًا، يُمكنك الوصول إلى القيم باستخدام مفاتيحها:

echo $my_assoc_array[key1] # Outputs: value1

تتضمن Bash دعمًا أصليًا للمصفوفات الترابطية منذ الإصدار 4.0. يُمكنك الإعلان عن القيم وتعيينها بنفس الطريقة التي تفعلها في Zsh. ولكن عندما يتعلق الأمر بالوصول إلى قيم المصفوفة، فأنت بحاجة إلى تضمين المفتاح داخل أقواس مُتعرجة:

echo "${my_assoc_array[key1]}"

يتمثل الاختلاف الرئيسي في أنَّ دعم Zsh للمصفوفات الترابطية أكثر ثراءً بالميزات وتقدمًا من Bash. تسمح Zsh للمصفوفات الترابطية بالحصول على مفاتيح لأنواع مختلفة من البيانات، وليس فقط السلاسل. بينما تدعم Bash مفاتيح السلسلة فقط.

في الإصدارات السابقة من Bash، كان عليك اكتشاف طريقة للحلول البديلة أو الحصول على أدوات خارجية لاستخدام المصفوفات الترابطية. تحقق من طرق تعداد Linux لتصعيد الصلاحيات.

3. أنماط التمرير المُوسعة

تُوفر أنماط التمرير الموسعة طريقة قوية ومرنة لتحديد الملفات والأدلة ومعالجتها بناءً على معايير مختلفة. إنها مفيدة عندما تعمل مع هياكل ملفات مُعقَّدة أو عندما تحتاج إلى تحكم دقيق في تحديدات الملفات.

في واجهة Zsh، يُمكنك تمكين هذه الأنماط باستخدام الأمر setopt. على سبيل المثال، لمطابقة جميع ملفات .txt الموجودة في الدليل الحالي:

setopt extended_glob
txt_files=(*.txt)

لمطابقة كافة الملفات باستثناء تلك ذات ملحق .log:

setopt extended_glob
non_log_files=^(*.log)

في Bash، تحتاج إلى تمكينها باستخدام الأمر shopt مع خيار extglob. على سبيل المثال، لمطابقة جميع ملفات .txt الموجودة في الدليل الحالي:

shopt -s extglob
txt_files=(*.txt)

لمطابقة كافة الملفات باستثناء تلك ذات ملحق .log:

shopt -s extglob
non_log_files=!(*.log)

الفرق الرئيسي بين Zsh و Bash عندما يتعلق الأمر بأنماط التمرير هو الأمر المُستخدم لتمكينها. ومع ذلك، لاحظ أنَّ بعض العوامل تختلف بين الواجهتين.

4. توسيع المعلمات المُتقدمة

تدعم Zsh التوسع غير المباشر للمعلمات. يُتيح لك ذلك توسيع قيمة المُتغير الذي تم تخزين اسمه في متغير آخر. لتحقيق ذلك، عليك أن تضع بادئة اسم المتغير بعلامة تعجب!.

name="foo"
result="${!name}"
echo "$result"

من ناحية أخرى، لا تسمح Bash بالتوسع غير المباشر محليًا. الحل البديل لذلك هو استخدام الأمر eval المضمن أو بناء الجملة ${!var} للمراجع المُتغيرة غير المباشرة.

name="world"
var="name"
echo ${!var} # This will output: world

أوجه التشابه بين Bash و Zsh

على الرغم من وجود اختلافات بين Bash وZsh، إلا أنهما يشتركان أيضًا في بعض أوجه التشابه.

1. بناء جملة سطر الأوامر

تتشارك Bash و Zsh في بناء جملة سطر أوامر مُماثل. يعد هذا أمرًا رائعًا لأنه يعني أنَّ معظم الأوامر والبرامج النصية التي تكتبها ستعمل في أي من الواجهتين، دون تعديل. تم بناء Zsh بالاستناد إلى Bash، لذا فهي تتضمن نفس الأوامر والميزات الأساسية.

ومع ذلك، هناك اختلافات طفيفة جدًا في بناء الجملة والتي ستحتاج إلى تحديدها وتعديلها.

2. اتساق استبدال الأوامر

استبدال الأوامر هو عملية دمج مخرجات أمر في أمر آخر. إنه مُتسق بين الواجهتين.

result=$(ls)

في كل من Bash و Zsh، يُمكنك استخدام بناء الجملة $(command) لاستبدال مخرجات الأمر بمُتغيِّر. وهذا يسمح بسهولة نقل البرامج النصية بين الواجهتين.

3. خيار تصحيح البرنامج النصي

يستخدم كل من Bash وZsh علامة -x لتصحيح أخطاء البرنامج النصي. عند تشغيل برنامج نصي بهذه العلامة، فإنه يعرض كل أمر قبل تشغيله. يساعدك هذا على تحديد المشكلات في البرامج النصية التي تُنشئها.

# Debugging a script in both Bash and Zsh
#!/bin/bash -x

echo "Debugging Bash script"

في برنامج Bash النصي هذا، تُتيح العلامة -x تصحيح الأخطاء. يُمكنك استخدام نهج مُماثل في Zsh؛ فقط استبدل bash بـ zsh.

اعتبارات للاختيار بين Zsh و Bash

  1. التوافق وقابلية النقل: Bash هي Shell الافتراضية في العديد من الأنظمة المستندة إلى Unix. وهذا يجعلها خيارًا أكثر أمانًا للبرمجة النصية عبر الأنظمة الأساسية. إذا كنت بحاجة إلى تشغيل البرامج النصية على نطاق واسع من الأنظمة دون تعديل، فإنَّ Bash هي الخيار الأفضل.
  2. تعقيد البرنامج النصي والميزات المتقدمة: تُوفر Zsh ميزات متقدمة مثل المصفوفات الترابطية وأنماط التمرير الموسعة وتوسيع المعلمات المتقدمة. وهذا يُبسط مهام البرمجة النصية المُعقَّدة. إذا كانت البرامج النصية التي تُنشئها تتطلب معالجة متقدمة للسلاسل أو هياكل البيانات، فإنَّ Zsh هي الخيار الأفضل.
  3. النظام البيئي للمُجتمع والمكونات الإضافية: تتمتع كل من Bash وZsh بمجتمعات نشطة، لكن Zsh لديها مجتمع أقوى ونظام بيئي واسع النطاق من المُكوِّنات الإضافية والموضوعات. إذا كنت تقدر التخصيص، فيمكن أن يكون دعم مجتمع Zsh والمُكوِّنات الإضافية ميزة كبيرة.
  4. سهولة التعلم: إذا كنت جديدًا في مجال البرمجة النصية لـ Shell، فإنَّ Bash هي نقطة بداية يسهل الوصول إليها. لديها وثائق وموارد واسعة النطاق متاحة للمبتدئين. وهذا يجعل من السهل تعلم أساسيات البرمجة النصية لـ Shell.

الأسئلة الشائعة

س1. ما هو الفرق بين Zsh و Bash؟

Zsh و Bash هما نوعان من الأوامر النصية أو “Shell” في أنظمة Unix و Linux. الفارق الرئيسي بينهما هو في الميزات والقدرات. Zsh تأتي مع ميزات مُتقدمة مثل الإكمال التلقائي المُحسن، والتخصيص السهل، وإدارة التاريخ والأمور الشخصية بفعالية. على الجانب الآخر، تُعتبر Bash أكثر استخدامًا واعتمادًا وتأتي مُثبتةً بشكل افتراضي على معظم أنظمة Linux.

س2. أيهما يجب أن أستخدم: Zsh أم Bash؟

الاختيار بين Zsh و Bash يعتمد على احتياجاتك. إذا كنت تحتاج إلى ميزات مُتقدمة وتخصيص قوي، فقد تكون Zsh خيارًا جيدًا. ومع ذلك، إذا كنت تعتزم استخدام Shell لأغراض أساسية وتُريد شيئًا مستقرًا ومتوافقًا مع العديد من الأنظمة، فقد تجد Bash أكثر مناسبة.

س3. كيف يُمكنني تثبيت Zsh أو Bash على نظامي؟

تثبيت Zsh أو Bash يعتمد على نظام التشغيل لديك. في الغالب، يمكنك استخدام مدير الحزم لنظامك لتثبيتهما. على سبيل المثال، في أنظمة Linux مبنية على Debian (مثل Ubuntu)، يُمكنك استخدام apt لتثبيت Zsh أو Bash.

س4. هل يُمكنني استخدام الإكمال التلقائي في Zsh مثلما يُمكنني في Bash؟

نعم، Zsh تُقدم إمكانيات إكمال تلقائي مُتقدمة. يُمكنك تخصيصها واستخدام الكثير من الإضافات المتاحة للحصول على تجربة إكمال تلقائي شبيهة بما تُقدمه Bash أو أفضل.

س5. هل يُمكنني تحويل الأوامر والبرامج النصية التي كتبتها لتعمل على كلا Shell؟

في العادة، نعم. الأوامر والبرامج النصية التي تم تطويرها باستخدام أحد Shell عادة ما تعمل على الواجهة الأخرى دون مشاكل كبيرة. ومع ذلك، قد تحتاج إلى إجراء تعديلات طفيفة في بعض الحالات، حيث تختلف بعض التفاصيل في السلوك بين Zsh و Bash. تحقق من أفضل الخيارات الوظيفية بعد تعلم استخدام Linux.

أتمتة المهام باستخدام برامج Shell النصية

إنَّ معرفة كيفية أتمتة المهام باستخدام نصوص Shell لها أهمية كبيرة. يُمكنك أتمتة المهام المُتكررة وتوفير الكثير من الوقت.

يمكنك أيضًا استخدام هذه البرامج النصية لإدارة حسابات المستخدمين، ومراقبة موارد النظام، وعمل نسخة احتياطية من البيانات، وإجراء الصيانة الروتينية. عند كتابتها بعناية، يُمكنها أيضًا تقليل احتمالية الخطأ البشري. يُمكنك الإطلاع الآن على مقارنة بين بين macOS و Linux: الاختلافات الرئيسية التي يجب أن تعرفها.

DzTech

أنا مهندس دولة مع خبرة واسعة في مجالات البرمجة وإنشاء مواقع الويب وتحسين محركات البحث والكتابة التقنية. أنا شغوف بالتكنولوجيا وأكرس نفسي لتقديم معلومات عالية الجودة للجمهور. يُمكنني أن أصبح موردًا أكثر قيمة للمُستخدمين الذين يبحثون عن معلومات دقيقة وموثوقة حول مُراجعات المُنتجات والتطبيقات المُتخصصة في مُختلف المجالات. إنَّ التزامي الثابت بالجودة والدقة يضمن أنَّ المعلومات المُقدمة جديرة بالثقة ومفيدة للجمهور. السعي المُستمر للمعرفة يدفعني إلى مواكبة أحدث التطورات التكنولوجية، مما يضمن نقل الأفكار المُشتركة بطريقة واضحة وسهلة المنال.
زر الذهاب إلى الأعلى