الفرق بين sh و bash

سئل على ٢٠ أبريل ٢٠١١  ·  تمت مشاهدة 557.1k مرة  ·  مصدر

Weiwei Yang picture
في ٢٠ أبريل ٢٠١١

عند كتابة برامج الصدف ، غالبًا ما نستخدم /bin/sh و /bin/bash . عادةً ما أستخدم bash ، لكنني لا أعرف ما هو الفرق بينهما.

ما الفرق الرئيسي بين bash و sh ؟

ما الذي نحتاج إلى معرفته عند البرمجة في bash و sh ؟

الإجابات

Roman Cheplyaka picture
في ٢٠ أبريل ٢٠١١
1243

ما هو sh

sh (أو لغة أوامر Shell) هي لغة برمجة موصوفة بواسطة معيار POSIX . لديها العديد من التطبيقات ( ksh88 ، dash ، ...). يمكن أيضًا اعتبار bash تطبيقًا لـ sh (انظر أدناه).

نظرًا لأن sh هو مواصفة وليس تطبيقًا ، فإن /bin/sh هو رابط رمزي (أو رابط صلب) لتطبيق فعلي على معظم أنظمة POSIX.

ما هو باش

bash كتطبيق متوافق مع sh (على الرغم من أنه يسبق معيار POSIX ببضع سنوات) ، ولكن بمرور الوقت اكتسب العديد من الامتدادات. قد تغير العديد من هذه الامتدادات سلوك البرامج النصية الصالحة لشل POSIX ، لذا فإن bash بحد ذاته ليس صدفة POSIX صالحة. بدلاً من ذلك ، إنها لهجة لغة POSIX shell.

bash يدعم --posix التبديل، مما يجعله أكثر POSIX متوافقة. كما أنه يحاول تقليد POSIX إذا تم استدعاؤه كـ sh .

ش = باش؟

لفترة طويلة ، استخدم /bin/sh للإشارة إلى /bin/bash في معظم أنظمة GNU / Linux. نتيجة لذلك ، أصبح من الآمن تقريبًا تجاهل الفرق بين الاثنين. لكن هذا بدأ يتغير مؤخرًا.

بعض الأمثلة الشائعة للأنظمة التي لا يشير فيها /bin/sh إلى /bin/bash (والتي قد لا يوجد حتى /bin/bash بعضها):

  1. أنظمة Debian و Ubuntu الحديثة ، التي تربط symlink sh بـ dash افتراضيًا ؛
  2. Busybox ، والذي يتم تشغيله عادةً أثناء وقت تمهيد نظام Linux كجزء من initramfs . يستخدم تطبيق shell ash .
  3. BSDs ، وبشكل عام أي أنظمة بخلاف Linux. OpenBSD يستخدم pdksh ، سليل Korn shell. FreeBSD sh هو سليل غلاف UNIX Bourne الأصلي. تمتلك Solaris sh الخاص بها والتي لم تكن متوافقة مع POSIX لفترة طويلة ؛ يتوفر تطبيق مجاني من مشروع الإرث .

كيف يمكنك معرفة نقاط /bin/sh على نظامك؟

التعقيد هو أن /bin/sh يمكن أن يكون رابطًا رمزيًا أو رابطًا صلبًا. إذا كان ارتباطًا رمزيًا ، فإن الطريقة المحمولة لحلها هي:

% file -h /bin/sh
/bin/sh: symbolic link to bash

إذا كان رابطًا صلبًا ، فحاول

% find -L /bin -samefile /bin/sh
/bin/sh
/bin/bash

في الواقع ، تغطي علامة -L كلاً من الروابط الرمزية والروابط الثابتة ، ولكن عيب هذه الطريقة أنها غير محمولة - لا تتطلب POSIX find لدعم الخيار -samefile ، بالرغم من أن كلاً من جنو وجده و

خط شيبانج

في النهاية ، الأمر متروك لك لتقرر أي واحد تريد استخدامه ، عن طريق كتابة سطر "shebang" باعتباره السطر الأول من البرنامج النصي.

على سبيل المثال

#!/bin/sh

ستستخدم sh (ومهما حدث للإشارة إلى) ،

#!/bin/bash

سيستخدم /bin/bash إذا كان متاحًا (ويفشل مع ظهور رسالة خطأ إذا لم يكن كذلك). بالطبع ، يمكنك أيضًا تحديد تطبيق آخر ، على سبيل المثال

#!/bin/dash

أي واحد لاستخدامه

بالنسبة للنصوص الخاصة بي ، أفضل sh للأسباب التالية:

  • هو موحد
  • إنه أبسط وأسهل بكثير للتعلم
  • إنه محمول عبر أنظمة POSIX - حتى لو لم يكن لديهم bash ، يجب أن يكون لديهم sh

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

Rein Henrichs picture
في ٢٠ أبريل ٢٠١١
158

sh : http://man.cx/sh
bash : http://man.cx/bash

TL ؛ DR : bash عبارة عن مجموعة شاملة من sh مع بنية أكثر أناقة ووظائف أكثر. من الآمن استخدام خط bash shebang في جميع الحالات تقريبًا لأنه موجود في كل مكان على المنصات الحديثة.

ملاحظة: في بعض البيئات، sh هو bash . تحقق من sh --version .

tripleee picture
في ٨ مارس ٢٠١٧
99

تم ترشيح هذا السؤال بشكل متكرر باعتباره أحد الأسئلة الأساسية للأشخاص الذين يحاولون استخدام sh ويفاجأون أنه لا يتصرف مثل bash . فيما يلي ملخص سريع لأوجه سوء الفهم الشائعة والمزالق.

أولاً ، يجب أن تفهم ما يمكن توقعه.

  • إذا قمت بتشغيل البرنامج النصي باستخدام sh scriptname ، أو تشغيله باستخدام scriptname وكان لديك #!/bin/sh في سطر shebang ، فيجب أن تتوقع سلوك POSIX sh .
  • إذا قمت بتشغيل البرنامج النصي باستخدام bash scriptname ، أو تشغيله بـ scriptname ولديك #!/bin/bash (أو ما يعادله محليًا) في سطر shebang ، فيجب أن تتوقع سلوك Bash.

يعد وجود shebang الصحيح وتشغيل البرنامج النصي عن طريق كتابة اسم البرنامج النصي فقط (ربما بمسار قريب أو كامل ) هو الحل المفضل بشكل عام. بالإضافة إلى shebang الصحيح ، يتطلب هذا أن يكون لدى ملف البرنامج النصي إذن التنفيذ ( chmod a+x scriptname ).

إذن ، كيف يختلفون بالفعل؟

يحتوي دليل مرجع Bash على قسم يحاول تعداد الاختلافات ولكن بعض مصادر الالتباس الشائعة تشمل

  • [[ غير متوفر في sh (فقط [ وهو أكثر شيوعًا ومحدودًا). راجع أيضًا الفرق بين الأقواس المربعة المفردة والمزدوجة في Bash
  • sh على صفائف.
  • بعض الكلمات الرئيسية في Bash مثل local و source و function و shopt و let و declare و select ليست محمولة إلى sh . (تدعم بعض عمليات التنفيذ sh مثل local .)
  • يحتوي Bash على العديد من امتدادات بناء الجملة على نمط C مثل الحلقة المكونة من ثلاث وسيطات for((i=0;i<=3;i++)) loop ، += زيادة التخصيص ، إلخ. ميزة $'string\nwith\tC\aescapes' مقبولة مبدئيًا sh على الأنظمة التي تلتزم فقط بمواصفات POSIX الحالية ، ومن المحتمل ألا تكون مدعومة لبعض الوقت في المستقبل).
  • يدعم Bash <<<'here strings' .
  • Bash لديها توسيع قوس *.{png,jpg} و {0..12} .
  • يشير ~ إلى $HOME فقط في Bash (وبشكل أكثر عمومًا ~username إلى الدليل الرئيسي username ). هذا في POSIX ، لكنه قد يكون مفقودًا من بعض عمليات التنفيذ السابقة لـ POSIX /bin/sh .
  • قامت Bash بعملية الاستبدال بـ <(cmd) و >(cmd) .
  • لدى Bash أسماء مستعارة لإعادة التوجيه على غرار Csh مثل &| مقابل 2>&1 | و &> مقابل > ... 2>&1
  • يدعم Bash العمليات المشتركة مع إعادة توجيه <> .
  • يتميز Bash بمجموعة غنية من توسعات المعلمات الموسعة غير القياسية مثل ${substring:1:2} ، ${variable/pattern/replacement} ، تحويل الحالة ، إلخ.
  • قام Bash بتوسيع تسهيلات حساب الصدف بشكل كبير (على الرغم من عدم وجود دعم للفاصلة العائمة). هناك صيغة قديمة قديمة $[expression] ومع ذلك يجب استبدالها بحساب POSIX $((expression)) بناء الجملة. (قد لا تدعم بعض عمليات التنفيذ القديمة قبل POSIX sh ذلك ، على الرغم من ذلك).
  • المتغيرات السحرية مثل $RANDOM و $SECONDS و $PIPESTATUS[@] و $FUNCNAME هي امتدادات Bash.
  • الاختلافات النحوية مثل export variable=value و [ "x" == "y" ] وهي غير محمولة ( export variable يجب أن تكون منفصلة عن التخصيص المتغير ، ومقارنة السلسلة المحمولة في [ ... ] تستخدم علامة تساوي واحدة ).
  • العديد والعديد من امتدادات Bash-only لتمكين السلوك الاختياري أو تعطيله وكشف الحالة الداخلية للصدفة.
  • العديد والعديد من الميزات الملائمة للاستخدام التفاعلي والتي لا تؤثر على سلوك البرنامج النصي.

تذكر ، هذه قائمة مختصرة. ارجع إلى الدليل المرجعي للحصول على السبق الصحفي الكامل ، و http://mywiki.wooledge.org/Bashism للحصول على العديد من الحلول الجيدة ؛ و / أو جرب http://shellcheck.net/ الذي يحذر من العديد من ميزات Bash فقط.

الخطأ الشائع هو أن يكون لديك سطر شيبانج #!/bin/bash ، لكن مع ذلك تستخدم sh scriptname لتشغيل البرنامج النصي فعليًا. يؤدي هذا بشكل أساسي إلى تعطيل أي وظيفة Bash فقط ، لذلك تحصل على أخطاء في بناء الجملة ، على سبيل المثال لمحاولة استخدام المصفوفات. (يعتبر سطر Shebang تعليقًا نحويًا ، لذلك يتم تجاهله ببساطة في هذا السيناريو.)

لسوء الحظ ، لن يحذر Bash عندما تحاول استخدام هذه التركيبات عندما يتم استدعاؤها كـ sh . لا يقوم بتعطيل جميع وظائف Bash فقط تمامًا ، لذا فإن تشغيل Bash عن طريق استدعاؤه كـ sh ليس طريقة جيدة للتحقق مما إذا كان البرنامج النصي الخاص بك قابل للنقل بشكل صحيح إلى ash / dash / POSIX sh أو متغيرات مثل Heirloom sh

Premraj picture
في ٩ فبراير ٢٠١٥
66

شل هي واجهة بين المستخدم ونظام التشغيل للوصول إلى خدمات نظام التشغيل. يمكن أن يكون إما واجهة المستخدم الرسومية أو CLI (واجهة سطر الأوامر).

sh (Bourne sh ell) هو مترجم سطر أوامر shell ، لأنظمة تشغيل تشبه يونكس / يونكس. يوفر بعض الأوامر المضمنة. في لغة البرمجة النصية نشير إلى المترجم على أنه #!/bin/sh . كانت واحدة مدعومة على نطاق واسع من قبل الأصداف الأخرى مثل bash (مجاني / مفتوح) ، kash (ليس مجانيًا).

باش (B ourne مكاسب الصورة الجحيم) هو استبدال قذيفة لبورن قذيفة. Bash هي مجموعة شاملة من sh. باش يدعم sh. POSIX عبارة عن مجموعة من المعايير التي تحدد كيفية عمل الأنظمة المتوافقة مع POSIX. Bash ليس في الواقع غلاف متوافق مع POSIX. في لغة البرمجة النصية نشير إلى المترجم على أنه #!/bin/bash .

تشبيه:

  • شل مثل واجهة أو مواصفات أو API.
  • sh هي فئة تنفذ واجهة شل.
  • Bash هي فئة فرعية من sh.

enter image description here

SriniV picture
في ٤ أغسطس ٢٠١٥
58

مشاركة من UNIX.COM

ميزات شل

يسرد هذا الجدول أدناه معظم الميزات التي أعتقد أنها ستجعلك تختار قشرة على أخرى. ليس المقصود أن تكون قائمة نهائية ولا تتضمن كل ميزة ممكنة لكل قشرة واحدة ممكنة. تعتبر الميزة موجودة في غلاف فقط إذا كانت في الإصدار الذي يأتي مع نظام التشغيل ، أو إذا كانت متوفرة كمترجمة مباشرة من التوزيع القياسي. على وجه الخصوص ، فإن غلاف C المحدد أدناه هو المتاح في SUNOS 4. * ، يقوم عدد كبير من البائعين الآن إما بشحن tcsh أو غلاف C المحسن الخاص بهم بدلاً من ذلك (لا يوضحون دائمًا أنهم يشحنون tcsh.

الشفرة:

                                     sh   csh  ksh  bash tcsh zsh  rc   es
Job control                          N    Y    Y    Y    Y    Y    N    N
Aliases                              N    Y    Y    Y    Y    Y    N    N
Shell functions                      Y(1) N    Y    Y    N    Y    Y    Y
"Sensible" Input/Output redirection  Y    N    Y    Y    N    Y    Y    Y
Directory stack                      N    Y    Y    Y    Y    Y    F    F
Command history                      N    Y    Y    Y    Y    Y    L    L
Command line editing                 N    N    Y    Y    Y    Y    L    L
Vi Command line editing              N    N    Y    Y    Y(3) Y    L    L
Emacs Command line editing           N    N    Y    Y    Y    Y    L    L
Rebindable Command line editing      N    N    N    Y    Y    Y    L    L
User name look up                    N    Y    Y    Y    Y    Y    L    L
Login/Logout watching                N    N    N    N    Y    Y    F    F
Filename completion                  N    Y(1) Y    Y    Y    Y    L    L
Username completion                  N    Y(2) Y    Y    Y    Y    L    L
Hostname completion                  N    Y(2) Y    Y    Y    Y    L    L
History completion                   N    N    N    Y    Y    Y    L    L
Fully programmable Completion        N    N    N    N    Y    Y    N    N
Mh Mailbox completion                N    N    N    N(4) N(6) N(6) N    N
Co Processes                         N    N    Y    N    N    Y    N    N
Builtin artithmetic evaluation       N    Y    Y    Y    Y    Y    N    N
Can follow symbolic links invisibly  N    N    Y    Y    Y    Y    N    N
Periodic command execution           N    N    N    N    Y    Y    N    N
Custom Prompt (easily)               N    N    Y    Y    Y    Y    Y    Y
Sun Keyboard Hack                    N    N    N    N    N    Y    N    N
Spelling Correction                  N    N    N    N    Y    Y    N    N
Process Substitution                 N    N    N    Y(2) N    Y    Y    Y
Underlying Syntax                    sh   csh  sh   sh   csh  sh   rc   rc
Freely Available                     N    N    N(5) Y    Y    Y    Y    Y
Checks Mailbox                       N    Y    Y    Y    Y    Y    F    F
Tty Sanity Checking                  N    N    N    N    Y    Y    N    N
Can cope with large argument lists   Y    N    Y    Y    Y    Y    Y    Y
Has non-interactive startup file     N    Y    Y(7) Y(7) Y    Y    N    N
Has non-login startup file           N    Y    Y(7) Y    Y    Y    N    N
Can avoid user startup files         N    Y    N    Y    N    Y    Y    Y
Can specify startup file             N    N    Y    Y    N    N    N    N
Low level command redefinition       N    N    N    N    N    N    N    Y
Has anonymous functions              N    N    N    N    N    N    Y    Y
List Variables                       N    Y    Y    N    Y    Y    Y    Y
Full signal trap handling            Y    N    Y    Y    N    Y    Y    Y
File no clobber ability              N    Y    Y    Y    Y    Y    N    F
Local variables                      N    N    Y    Y    N    Y    Y    Y
Lexically scoped variables           N    N    N    N    N    N    N    Y
Exceptions                           N    N    N    N    N    N    N    Y

مفتاح الجدول أعلاه.

يمكن عمل ميزة ص باستخدام هذا الغلاف.

N الميزة غير موجودة في الغلاف.

لا يمكن عمل الميزة F إلا باستخدام آلية وظيفة الأصداف.

L يجب ربط مكتبة readline بالصدفة لتمكين هذه الميزة.

ملاحظات على الجدول أعلاه

1. This feature was not in the original version, but has since become
   almost standard.
2. This feature is fairly new and so is often not found on many
   versions of the shell, it is gradually making its way into
   standard distribution.
3. The Vi emulation of this shell is thought by many to be
   incomplete.
4. This feature is not standard but unofficial patches exist to
   perform this.
5. A version called 'pdksh' is freely available, but does not have
   the full functionality of the AT&T version.
6. This can be done via the shells programmable completion mechanism.
7. Only by specifying a file via the ENV environment variable.
Timothy L.J. Stewart picture
في ٣ سبتمبر ٢٠١٦
26

طرفية

  • البرنامج (البرامج) التي تضع نافذة
  • xterm و rxvt و konsole و kvt و gnome-terminal و nxterm و eterm.

الصدف

  • هو برنامج يعمل في المحطة
  • شل هي مترجم أوامر ولغة برمجة
  • شل ببساطة هو معالج ماكرو ينفذ الأوامر.
  • يُقصد بمعالج الماكرو الوظائف التي يتم فيها توسيع النص والرموز لإنشاء تعبيرات أكبر.

SH مقابل.

SH

  • (الصدف)
  • هي قشرة محددة
  • مترجم أوامر ولغة برمجة
  • سلف باش

سحق

  • (بورن قذيفة ثانية)
  • هي قشرة محددة
  • مترجم أوامر ولغة برمجة
  • لديه وظائف sh وأكثر
  • خليفة SH
  • BASH هي شل الافتراضي

المواد المرجعية:

شل gnu.org:

القشرة في قاعدتها يعني مصطلح

غلاف Unix

يمكن استخدام الأصداف بشكل تفاعلي أو غير تفاعلي. في الوضع التفاعلي ، يقبلون الإدخال المكتوب من لوحة المفاتيح. عند التنفيذ غير التفاعلي ، تنفذ القذائف أوامر القراءة من ملف.

تسمح القشرة بتنفيذ أوامر جنو بشكل متزامن وغير متزامن. تنتظر الصدفة إكمال الأوامر المتزامنة قبل قبول المزيد من المدخلات ؛ تستمر الأوامر غير المتزامنة في التنفيذ بالتوازي مع shell أثناء قراءتها وتنفيذ أوامر إضافية. تسمح بنيات إعادة التوجيه بالتحكم الدقيق في مدخلات ومخرجات تلك الأوامر. علاوة على ذلك ، يسمح الغلاف بالتحكم في محتويات بيئات الأوامر.

توفر القذائف أيضًا مجموعة صغيرة من الأوامر المضمنة (مدمجة) تنفذ وظائف مستحيلة أو غير مريحة للحصول عليها عبر أدوات مساعدة منفصلة . على سبيل المثال ، لا يمكن تنفيذ cd و break و continue و exec خارج الصدفة لأنهم يعالجون الغلاف نفسه مباشرةً. يمكن تنفيذ المحفوظات أو getopts أو kill أو pwd ، من بين أمور أخرى ، في أدوات مساعدة منفصلة ، لكنها أكثر ملاءمة للاستخدام كأوامر مضمنة. يتم وصف جميع المباني الهيكلية في الأقسام اللاحقة.

في حين أن تنفيذ الأوامر أمر ضروري ، فإن معظم قوة (وتعقيد) الأصداف ترجع إلى لغات البرمجة المدمجة الخاصة بها. مثل أي لغة عالية المستوى ، توفر الصدفة المتغيرات وبناء التحكم في التدفق والاقتباس والوظائف.

تقدم الأصداف ميزات مصممة خصيصًا للاستخدام التفاعلي بدلاً من زيادة لغة البرمجة. تتضمن هذه الميزات التفاعلية التحكم في الوظائف وتحرير سطر الأوامر وسجل الأوامر والأسماء المستعارة. كل من هذه الميزات موصوفة في هذا الدليل.

باش gnu.org:

Bash هي قذيفة ، أو مترجم لغة الأوامر ، لنظام التشغيل جنو. الاسم هو اختصار لـ "Bourne-Again SHell" ، وهو تورية على ستيفن بورن ، مؤلف السلف المباشر لصدفة Unix الحالية sh ، والتي ظهرت في إصدار Seventh Edition Bell Labs Research من Unix.

Bash متوافق إلى حد كبير مع sh ويتضمن ميزات مفيدة من Korn shell ksh و C shell csh. من المفترض أن يكون تطبيقًا متوافقًا مع جزء IEEE POSIX Shell and Tools من مواصفات IEEE POSIX (IEEE Standard 1003.1). يقدم تحسينات وظيفية على sh لكل من الاستخدام التفاعلي والبرمجي.

بينما يوفر نظام التشغيل GNU قذائف أخرى ، بما في ذلك نسخة من csh ، فإن Bash هو الصدفة الافتراضية . مثل برامج جنو الأخرى ، فإن Bash محمول تمامًا. يعمل حاليًا على كل إصدار من Unix تقريبًا وعدد قليل من أنظمة التشغيل الأخرى - توجد منافذ مدعومة بشكل مستقل لأنظمة MS-DOS و OS / 2 و Windows.

Andrzej Pronobis picture
في ١٨ مايو ٢٠١٥
15

أشارت إجابات أخرى بشكل عام إلى الاختلاف بين Bash ومعيار POSIX shell. ومع ذلك ، عند كتابة نصوص برمجية للقذيفة المحمولة واستخدامها في بناء جملة Bash ، فإن قائمة bashisms النموذجية وحلول POSIX النقية المقابلة مفيدة للغاية. تم تجميع هذه القائمة عندما تحول Ubuntu من Bash إلى Dash كصدفة نظام افتراضية ويمكن العثور عليها هنا: https://wiki.ubuntu.com/DashAsBinSh

علاوة على ذلك ، هناك أداة رائعة تسمى checkbashisms تتحقق من bashisms في البرنامج النصي الخاص بك وتكون مفيدة عندما تريد التأكد من أن البرنامج النصي الخاص بك محمول.

Ryan Taylor picture
في ٢٣ سبتمبر ٢٠١٩
9

إنها متطابقة تقريبًا ولكن bash بها ميزات أكثر - sh (أكثر أو أقل) مجموعة فرعية أقدم من bash .

غالبًا ما يعني sh Bourne shell الأصلي ، والذي يسبق bash ( Bourne *again* shell ) ، وقد تم إنشاؤه في عام 1977. ولكن ، من الناحية العملية ، قد يكون من الأفضل فكر في الأمر على أنه غلاف متوافق للغاية ومتوافق مع معيار POSIX منذ عام 1992.

البرامج النصية التي تبدأ بـ #!/bin/sh أو تستخدم sh shell عادةً ما تفعل ذلك للتوافق مع الإصدارات السابقة. أي نظام تشغيل يونكس / لينكس سيكون له غلاف sh . على Ubuntu sh غالبًا ما يستدعي dash وفي نظام MacOS يكون إصدار POSIX خاصًا bash . قد تكون هذه الأصداف مفضلة للسلوك المتوافق مع المعايير أو السرعة أو التوافق مع الإصدارات السابقة.

bash هو أحدث من sh الأصلي ، ويضيف المزيد من الميزات ، ويسعى ليكون متوافقًا مع sh . من الناحية النظرية ، يجب تشغيل برامج sh bash . يتوفر bash على جميع أجهزة Linux / unix تقريبًا وعادة ما يتم استخدامه افتراضيًا - مع استثناء ملحوظ لـ MacOS الافتراضي إلى zsh اعتبارًا من Catalina (10.15). لا يتم تثبيت FreeBSD افتراضيًا مع تثبيت bash .

Gopika BG picture
في ١٦ مايو ٢٠١٩
7

باش وش نوعان من قذائف مختلفة. في الأساس bash هو sh ، مع المزيد من الميزات وبناء الجملة الأفضل. تعمل معظم الأوامر بالطريقة نفسها ، لكنها مختلفة ، فباش (bash) هي واحدة من العديد من قذائف Unix المتاحة (لكنها الأكثر استخدامًا). Bash تعني "Bourne Again SHell" ، وهي استبدال / تحسين قشرة Bourne الأصلية (sh).

البرمجة النصية لـ Shell هي البرمجة النصية في أي قشرة ، في حين أن البرمجة النصية Bash هي البرمجة النصية خصيصًا لـ Bash. ومع ذلك ، فمن الناحية العملية ، غالبًا ما يتم استخدام "shell script" و "bash script" بالتبادل ، ما لم تكن الصدفة المعنية هي Bash.

بعد قولي هذا ، يجب أن تدرك أن / bin / sh في معظم الأنظمة سيكون رابطًا رمزيًا ولن يستدعي sh. في Ubuntu / bin / sh يُستخدم للربط بـ bash ، وهو سلوك نموذجي في توزيعات Linux ، ولكنه تغير الآن إلى الارتباط بقذيفة أخرى تسمى dash. سأستخدم bash ، لأن هذا هو المعيار إلى حد كبير (أو على الأقل الأكثر شيوعًا ، من تجربتي). في الواقع ، تظهر المشاكل عندما يستخدم سكربت bash #! / bin / sh لأن صانع النص يفترض أن الرابط هو bash عندما لا يكون كذلك.

Keith Thompson picture
في ٩ أبريل ٢٠١٥
3

/bin/sh قد يستدعي أو لا يستدعي نفس البرنامج مثل /bin/bash .

يدعم sh على الأقل الميزات المطلوبة بواسطة POSIX (بافتراض التنفيذ الصحيح). قد يدعم الامتدادات أيضًا.

bash ، "Bourne Again Shell" ، تنفذ الميزات المطلوبة للامتدادات الخاصة بـ sh بالإضافة إلى bash. مجموعة الامتدادات الكاملة طويلة جدًا بحيث لا يمكن وصفها هنا ، وهي تختلف باختلاف الإصدارات الجديدة. تم توثيق الاختلافات في دليل bash. اكتب info bash واقرأ قسم "ميزات Bash" (القسم 6 في الإصدار الحالي) ، أو اقرأ الوثائق الحالية على الإنترنت .