باش (صدفة يونكس)

باش (اختصارًا لـ " Bourne Again SHell ") هو مترجم أوامر تفاعلي ولغة أوامر طُوِّرت لأنظمة التشغيل الشبيهة بنظام يونكس . بدعم من مؤسسة البرمجيات الحرة ، أنشأه برايان فوكس عام ١٩٨٩ لمشروع جنو ، وهو مصمم كبديل برمجي حر بالكامل لـ Bourne shell ، وغيرها من واجهات يونكس الاحتكارية . [ ٥ ] بعد أن حظي باش بانتشار واسع، يُستخدم عادةً كواجهة تسجيل دخول افتراضية للعديد من توزيعات لينكس . [ ٦ ] كما يدعم تنفيذ الأوامر من الملفات، المعروفة باسم نصوص شل ، مما يُسهِّل الأتمتة .sh

يُعدّ بناء جملة أوامر Bash مجموعةً فرعيةً من بناء جملة Bourne shell ، حيث نُسخت جميع الميزات الأساسية لبناء جملة Bash منه. ونتيجةً لذلك، يستطيع Bash تنفيذ الغالبية العظمى من نصوص Bourne shell دون تعديل. كما استُعيرت بعض الأفكار الأخرى من C shell ، وخليفتها tcsh ، و Korn Shell . [ 7 ] وهو متوفر على جميع أنظمة التشغيل الحديثة تقريبًا، مما يجعله أداةً متعددة الاستخدامات في بيئات الحوسبة المختلفة.

التعريفات

ASCII، السلاسل والأرقام

يجب أولاً التعرف على لغة الإدخال إلى الصدفة على مستوى الأحرف. [ ب ]

معهد مهندسي الكهرباء والإلكترونيات ومجموعة أوبن

$ printf '<سطر جديد>: <%b>\n' $'\n' <سطر جديد>: < > $ printf '<علامة جدولة>: <%b>\n' $'\t' <علامة جدولة>: < > $ printf '<مسافة>: <%s>\n' " " <مسافة>: < > $ printf '<NUL>: <%b>\n' $'\0' <NUL>: <>

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

يستخدم Bash، مثل العديد من لغات البرمجة الأخرى، الترقيم الذي يبدأ من الصفر .

اختصارات لوحة المفاتيح Ctrl+

تُوفّر مكتبة GNU Readline وظيفة الضغط على مفتاح Control+key ، وهي متاحة فقط في الوضع التفاعلي. تسمح بعض مجموعات المفاتيح للمستخدم بتشغيل Bash لاستخدام ميزة الإكمال التلقائي (Tab) والبحث في سجل الأوامر.

  • Tab ↹– تفعيل خاصية الإكمال التلقائي
  • – قم بالتمرير لأعلى (أي للخلف) في سجل الأوامر
  • – قم بالتمرير لأسفل (أي للأمام) في سجل الأوامر
  • Ctrl+r – البحث في سجل الأوامر

تتيح بعض اختصارات لوحة المفاتيح للمستخدم تشغيل محاكي الطرفية لتحريك المؤشر داخل نافذة الطرفية والتحكم في برنامج المحاكي. [ 10 ] بشكل افتراضي، تُطابق اختصارات لوحة المفاتيح هذه في Bash تلك الموجودة في Emacs . [ د ]

تتضمن اختصارات لوحة المفاتيح الافتراضية لرموز التحكم ما يلي:

  • Ctrl+f – حرك المؤشر حرفًا واحدًا إلى اليمين
  • Ctrl+b – حرك المؤشر حرفًا واحدًا إلى اليسار
  • Alt+f – حرك المؤشر كلمة واحدة إلى اليمين
  • Alt+b – حرك المؤشر كلمة واحدة إلى اليسار
  • Ctrl+a – انقل المؤشر إلى بداية سطر الأوامر الحالي
  • Ctrl+c – يلغي الأمر الحالي ويعرض موجه أوامر جديد
  • Ctrl+d – يغلق مثيل Bash الحالي، وقد يغلق أيضًا محاكي الطرفية
  • Ctrl+e – انقل المؤشر إلى نهاية سطر الأوامر الحالي
  • Ctrl+q – إيقاظ الطرفية؛ ثم تتم معالجة ضغطات المفاتيح المخزنة مؤقتًا
  • Ctrl+s – ضع الجهاز في وضع السكون
  • Ctrl+w – إزالة كلمة واحدة إلى يسار المؤشر
  • Ctrl+z – إيقاف عملية تعمل في المقدمة

تتوفر أيضًا اختصارات لوحة المفاتيح الخاصة بـ Vi ويمكن تفعيلها عن طريق تشغيل . [ e ]set-ovi

بناء الجملة

عندما يقرأ Bash سطر أوامر كامل، يتم تقسيم السلسلة الكاملة إلى رموز. يتم تحديد "الرموز" باستخدام الأحرف الخاصة، ويتم فصلها عن بعضها البعض باستخدام الأحرف الخاصة .

اعتبارًا من Bash 5.3، فإن الأحرف العشرة الخاصة هي المسافة، وعلامة الجدولة، والسطر الجديد، بالإضافة إلى الأحرف التالية:|&;()<>

تتكون "الفراغات" بالكامل من أحرف خاصة غير مقتبسة، وتحتوي "العوامل" على حرف خاص واحد على الأقل غير مقتبس، وقد لا تتضمن "الكلمات" أي أحرف خاصة غير مقتبسة.

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

الفراغان هما مسافة وعلامة جدولة.

المشغلون

تؤدي عوامل التحكم وظيفة تحكم . ويمكن أن تكون إما سطرًا جديدًا أو أحد العناصر التالية: ||، &&، &، ;، ;;، ;&، ;;&، |، |&، (، أو ).

تقوم عوامل إعادة التوجيه بإعادة توجيه تدفقات الإدخال أو الإخراج. وتشمل هذه العوامل <: >، ، ، ، و .&><<<<<

كلمات

الكلمة هي سلسلة من الأحرف (غير المعرّفة) التي يتعامل معها النظام كوحدة واحدة. الكلمة المحجوزة هي نوع من الكلمات التي لها معنى خاص في النظام. [ f ]

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

ستة عشر كلمة من أصل اثنين وعشرين كلمة "محجوزة"، والتي قد تكون أحرفاً أو كلمات، هي كما يلي:

'!' '[[' '{' ']]' '}' case in esac for do done if then elif else fi ... 

لا يجوز أن تحتوي الأسماء إلا على الأحرف ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_.

في المثال التالي لسلسلة أوامر كاملة، يتم وضع فاصلة فوق الأحرف الخاصة ، ، ، ويتم وضع علامة الإقحام أسفل الكلمات المحجوزة ، ^ ، ويتم وضع علامة ` أيضًا أسفل الرموز الأخرى ، ` .

$ #, , , ,, ,, , $ إذا كان echo foo ; ثم bar = abc ; fi $ # ^^ ```` ``` ^^^^ ``````` ^^

الأغلفة الفرعية

"الصدفة الفرعية" هي نسخة إضافية من الصدفة يتم تهيئتها بواسطة نسخة حالية منها. عندما تُنشئ صدفة "أصلية" صدفة فرعية، أو صدفة "تابعة"، تُعاد إنشاء نسخة طبق الأصل من معلومات بيئة الصدفة الأصلية لتصبح بيئة الصدفة الفرعية.

في Bash، في السياقات غير الحسابية، يمكن فرض استخدام غلاف فرعي عن طريق وضع سلسلة أوامر كاملة بين قوسين مفردين .

$ echo foo ; ( echo foo ) foo foo

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

  • ()على سبيل المثال، تقوم صيغة Subshells بتهيئة غلاف فرعي:
    $ ( برنامج arga argb )
  • سيؤدي استخدام صيغة التوجيه (Piping syntax) A | Bإلى تهيئة عدة أغلفة فرعية، واحد لكل أمر منفصل في سلسلة الأوامر:
    $ program1 abc def | program2 -abc 

توسع

هياكل البيانات

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

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

يُنصح بوضع اسم المتغير بين قوسين معقوفين (أقواس مربعة) {}لتحسين سهولة القراءة وضمان التناسق بين المتغيرات والمصفوفات. عند كتابة المتغيرات، يكون استخدام الأقواس المعقوفة اختياريًا، بينما يُعد استخدام الأقواس المربعة خطأً في بناء الجملة. توضع أسماء المعاملات دائمًا على يسار علامة المساواة، بينما توضع القيم دائمًا على يمينها.

المتغيرات

يتم تعيين قيمة لمتغير باستخدام الصيغة التالية name=value.

لاستخدام متغير، $nameيتم استخدام الصيغة، أو ${name}، والتي تتوسع إلى القيمة المعينة للمتغير.

يجب استخدام الصيغة الأخيرة لبعض الأسماء لتجنب الآثار الجانبية غير المرغوب فيها. على سبيل المثال، $10سيتم تحليل الاسم على أنه ${1}0، لذا فإن استخدام الصيغة الأخيرة ${10}يعني أنه سيتم تحليله كما هو مطلوب.

تُشار إلى المعاملات الموضعية، التي تُمرر عادةً إلى سكربت باش، بالمتغيرات المرقمة بدءًا من $1. أما المعاملات الخاصة فتُشار إليها بعلامات الترقيم. على سبيل المثال، "$@"يتوسع الأمر إلى قائمة بالمعاملات الموضعية من الأول إلى الأخير، مع وضع علامات اقتباس حول كل منها على حدة، مفصولة بمسافات. [ g ]

تُكتب متغيرات البيئة بأحرف كبيرة. تشمل متغيرات البيئة متغيرات يونكس مثل `<اسم المتغير>` LESS_SIGUSR1، ومتغيرات بورن شيل مثل `< HOMEاسم المتغير>`. أما متغيرات البرمجة النصية فتُكتب بأحرف صغيرة أو بنمط CamelCase. هذا مجرد اصطلاح، إذ يمكن تمرير أي متغير إلى exportالأمر المراد تحويله إلى متغير بيئة.

المصفوفات

المصفوفات هي هياكل بيانات تحتوي على قيم متعددة. [ h ]

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

يتم تعيين المصفوفة باستخدام الصيغة name=( one or more elements ). ويتم توسيعها باستخدام أو أو ، وذلك حسب حالة الاستخدام.${quux[@]}${quux[*]}${quux[1]}

يتم تمييز كل نوع من أنواع المعلمات باتفاقية تسمية محددة . [ i ]

منذ إصدار Bash 4.0، يدعم Bash أيضًا المصفوفات الترابطية . [ 2 ]

في هذه المقالة، تتضمن أمثلة المتغيرات من هذا القسم ${foo} و PID و PWD و EUID و $$ و ${quux} و ${zork} .

تنفيذ

يحدث "تنفيذ" برنامج معين عندما يطلب المستخدم (أو برنامج آخر) من نظام التشغيل التصرف بناءً على التعليمات الواردة في البرنامج المحدد.

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

$ foo = aa bar = bb quux = cc zork = dd ; set -o xtrace $ : " ${ foo } " ; : " ${ bar } " + : aa + : bb $ : " ${ quux } " \ > : " ${ zork } " + : cc : dd

تُعرف الكلمة الأولى في سطر الأوامر باسم "موضع الأمر". وفقًا لمعايير يونكس، تكون الكلمة الأولى في سطر الأوامر دائمًا نوعًا من الأوامر، أما الكلمات المتبقية في سلسلة سطر الأوامر فهي إما خيارات للأمر، أو وسائط للخيارات، أو نوع من المدخلات التي سيعمل عليها الأمر. تُسمى "الخيارات" أيضًا "علامات" أو "مفاتيح تبديل" أو، بشكل أكثر دقة، "عوامل تشغيل". عندما يحاول باش تحديد موقع أمر للتنفيذ، فإنه يبحث في الدلائل المدرجة في المتغير $PATHودليل العمل الحالي. [ 12 ]

$ # [موضع الأمر] [الخيار] [الوسائط] $ # ,--^ ,------------^ ,----^ $ declare -p USER BASH_VERSION declare -x USER="liveuser" declare -- BASH_VERSION="5.2.37(1)-release"

المستخدمون و PS1

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

عندما تنتظر جلسة طرفية تفاعلية إدخال المستخدم، فإنها تطبع افتراضيًا سلسلة معينة من الأحرف على الشاشة. في Bash، تُخزَّن قيمة هذه السلسلة في متغير$PS1 الطرفية . بالنسبة للمستخدمين العاديين، القيمة الافتراضية الشائعة $PS1هي رمز الدولار ( $ ). أما بالنسبة للمستخدمين ذوي الصلاحيات الإدارية ، فالقيمة الافتراضية الشائعة هي رمز التجزئة ( # ).

$ sudo --login --user root [sudo] كلمة مرور المستخدم liveuser: # umask 077 # echo bob > /home/liveuser/names.txt # exit $ grep -e bob ./names.txt grep: ./names.txt: تم رفض الوصول

الأوضاع

نموذج البرمجة

على الرغم من أن معظم المستخدمين ينظرون إلى الصدفة على أنها مترجم أوامر تفاعلي، إلا أنها في الواقع لغة برمجة يُنفذ فيها كل سطر أمراً. ولأنها يجب أن تُلبي الجانبين التفاعلي والبرمجي لتنفيذ الأوامر، فهي لغة غريبة، تشكلت بفعل التاريخ بقدر ما تشكلت بفعل التصميم. [ 13 ]

لغة Bash مكتوبة بلغة C. ويمكن محاكاة أسلوب البرمجة المعياري من خلال الأسلوب الجيد والتصميم الدقيق. [ 14 ] وغالبًا ما تُستخدم في أسلوب البرمجة الإجرائي أو الإجرائي .

الوضع التفاعلي والوضع غير التفاعلي

يعمل Bash كمعالج أوامر في وضعين: تفاعلي وغير تفاعلي. في الوضع التفاعلي ، تُقرأ الأوامر عادةً من محاكي طرفية . أما في الوضع غير التفاعلي، الذي يُسهّل الأتمتة ، فتُقرأ الأوامر عادةً من ملفات مُسماة تُعرف اليوم باسم نصوص shell . عند تنفيذه كأمر مستقل في واجهة سطر الأوامر (CLI)، يفتح Bash افتراضيًا نافذة طرفية جديدة في الوضع التفاعلي.

النصوص

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

يبدأ أول حرفين من السطر الأول لأي نص برمجي (قابل للتنفيذ) بشيء يسمى shebang : حرفيًا الحرفين hash ( # ) و bang ( ! ) جنبًا إلى جنب.

$ cat ./example.sh # ! /bin/env bash echo foo

إذا كان الهدف من تشغيل نص برمجي هو أن يقوم المستخدم بتشغيله كبرنامج مستقل عبر سطر الأوامر، فإنه يُشار إليه باسم "ملف تنفيذي" . ويُعرف اسم ملفات النصوص البرمجية التنفيذية.sh في أنظمة يونكس باللاحقة .execute . ويمكن تفعيل بت "execute" في نص برمجي باستخدام الأداة المساعدة التالية chmod:

$ ls -l ./example.sh -rw-r--r--.1 liveuser liveuser 32 Aug 3 22:33 example.sh $ ./example.sh bash: ./example.sh: تم رفض الإذن $ chmod 0744 ./example.sh $ ls -l ./example.sh -rwxr--r--.1 liveuser liveuser 32 Aug 3 22:33 example.sh $ ./example.sh foo

المدمجsource

باستخدام الأمر source، أو .الأمر المرادف له، يقرأ Bash وينفذ أوامر shell من أي ملف نصي بالاسم. [ k ]

واجهات تسجيل الدخول وواجهات غير تسجيل الدخول

يمكن تشغيل Bash كصدفة تسجيل دخول ، أو " قائد جلسة "، في كلٍ من الوضعين التفاعلي وغير التفاعلي عبر --loginالخيار المناسب. يتطلب "تسجيل الدخول" مصادقة المستخدم . لهذا السبب، توجد صدفة تسجيل دخول واحدة فقط لكل جلسة مستخدم. في GNU/Linux، تُحدد صدفة تسجيل دخول المستخدم في الملف /etc/passwd.

$ awk -F ':' '$1 ~ /root/' /etc/passwd root:x:0:0:Super User:/root:/bin/bash

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

يمكن تسجيل الخروج من جلسة shell من داخل محاكي طرفية باستخدام أمر الخروج أو، بشكل افتراضي في Bash، بالضغط على + . Ctrld

sourceملفات بدء التشغيل

عند بدء تشغيل Bash، يستخدم sourceلتنفيذ الأوامر في مجموعة متنوعة من الملفات المخفية (انظر القوائم أدناه). [ 15 ] هذه الملفات المخفية، على عكس البرامج النصية، لا تحتوي عادةً على إذن التنفيذ أو علامة التجزئة (# ). بشكل افتراضي، يقوم Bash باستدعاء مجموعة مختلفة نوعًا ما من الملفات، وبترتيب مختلف، اعتمادًا على: [ l ]

  • كيفية استدعاء Bash: تفاعليًا، وغير تفاعليًا، ويتم استدعاؤه بالاسمsh
  • --loginما --rcfileهي --norcالخيارات المستخدمة؟--posix
  • ما هي متغيرات البيئة المحددة BASH_ENV؟ENV
  • ما هي الملفات الموجودة؟
    • /etc/profile
    • ~/.bash_profile
    • ~/.bash_login
    • ~/.profile
    • ~/.bash_logout، و
    • ~/.bashrcمن بين أمور أخرى.

بالطبع، يمكن لأي ملف بدء تشغيل تنفيذ أوامر من أي ملف آخر. ويمكن لملفات بدء التشغيل أن تؤثر على سلوك الصدفة، ومحاكيات الطرفية، ونظام نوافذ X، ومدير النوافذ .

وضع POSIX

يحدد معيار POSIX IEEE 1003.1 مجموعةً مشتركةً من التعريفات التي يمكن لأي تطبيق نظام طرفي (مثل bash و dash و zsh وغيرها ) الالتزام بها. يجب أن يكون أي نص برمجي للمستخدم./myscript.sh مكتوب وفقًا لإرشادات POSIX قابلاً للتنفيذ بواسطة أي تطبيق نظام طرفي يُطبّق مواصفات POSIX. ونتيجةً لذلك، يُمكن توقع إمكانية تنفيذ النصوص البرمجية المتوافقة مع POSIX بنجاح على أي نظام تشغيل Unix أو نظام تشغيل شبيه بـ Unix يُطبّق معيار POSIX (مثل Linux و OpenBSD و Oracle Linux و HP-UX وغيرها). تُعتبر هذه النصوص البرمجية " قابلة للنقل " كما هي دون أي تعديلات إضافية. يُعدّ جزء POSIX الذي ينطبق على الأصداف وأدوات سطر الأوامر جزءًا من مجموعة أكبر من معايير POSIX التي تُحدّد بشكلٍ أدقّ كيفية عمل المحطات الطرفية ومحاكيات المحطات الطرفية لكي تُعتبر قابلةً للنقل أيضًا.

عندما يعمل Bash في وضع POSIX، تتوفر ميزات أقل ولكن يمكن تنفيذ الكود الناتج على مجموعة أكبر من أنظمة التشغيل.

لتمكين وضع POSIX عند تهيئة الصدفة التفاعلية، يمكن تنفيذ Bash إما كـ sh، bash --posixأو bash -o posix. [ m ]

لتهيئة سكربت في وضع POSIX، يُستخدم إما علامة التجزئة (#bang) #!/usr/bin/env shأو الخيار الأقل قابلية للنقل #!/bin/sh. عند تشغيل نسخة من Bash في وضع POSIX، $POSIXLY_CORRECTيتم تعريف متغير البيئة، وتتضمن قيمته SHELLOPTSالسلسلة posix .

$ declare -p POSIXLY_CORRECT SHLVL bash: declare: POSIXLY_CORRECT: not found declare -x SHLVL="1" $ bash -o posix $ declare -p POSIXLY_CORRECT SHLVL declare -- POSIXLY_CORRECT="y" declare -x SHLVL="2"

تتضمن قائمة الميزات الكاملة المتوفرة في Bash والتي لم يحددها معيار POSIX عددًا كبيرًا من الميزات. [ 17 ] إليك قائمة جزئية منها:

  • أي مصفوفات أخرى غير مصفوفة المعاملات الموضعية، $@لا تُعتبر مصفوفات POSIX
  • بنية الاختبار الموسعة ذات الأقواس المزدوجة [[...]]ليست من نوع POSIX
    • [...]وهي testPOSIX
  • إحدى صيغ التقييم الحسابي ذات الأقواس المزدوجة، ((...))، ليست من نوع POSIX
    • $((...))هو POSIX
  • توسيع الأقواس kernel{,-headers}ليس POSIX
  • localلا يتوافق النطاق الديناميكي للمعاملات والوظائف المدمجة مع معيار POSIX
  • استبدال العمليات <(...)ليس من نوع POSIX
  • بعض عمليات معالجة السلاسل النصية في توسيعات المعلمات لا تتوافق مع معيار POSIX
  • معظم أوامر Bash المدمجة ليست متوافقة مع معيار POSIX
    • يطبع الأمر قائمة بالوظائف المدمجة الخاصة بـ Bourne، وهي وظائف POSIXenable-s
      $ enable -s | wc --lines 16 $ enable | wc --lines 61
    • الدالة enableالمدمجة نفسها ليست POSIX
    • في Bash، في الوضع غير POSIX، تكون الدوال المضمنة .و مترادفة.source
      • الدالة .المدمجة (أي "dot") هي POSIX، ومع ذلك
      • الدالة sourceالمدمجة ليست POSIX
  • متغيرات الصدفة ليست من نوع $EPOCHSECONDSPOSIX$EPOCHREALTIME

قد تحتوي أوامر النظام المتوفرة في أنظمة التشغيل الحديثة الشبيهة بنظام يونكس، والمحددة أيضًا في معيار POSIX، على عدد أقل من خيارات الأوامر أو متغيرات البيئة ذات الصلة المتاحة في هذا المعيار. معظم هذه الأوامر (مثل `<b> ls`) هي برامج مستقلة موجودة في مجلدات /bin` <b> /usr/bin` أو `<b>` /sbinأو `<b>` /usr/sbin(في لينكس، عادةً ما توفرها GNU coreutils أو BusyBox ) وليست أوامر مدمجة في Bash.

بسبب هذه الاختلافات وغيرها، نادرًا ما يمكن تشغيل نصوص Bash البرمجية الحديثة (الإصدار 5) مباشرةً على مُفسِّرَي Bourne أو Korn القديمين. ومع ازدياد انتشار نظام GNU/Linux، أصبح استخدام البرمجة النصية مع مراعاة قابلية النقل أقل شيوعًا.

يُطلق على الكود الذي يُعدّ صيغةً صحيحةً في Bash ولكنه غير مُحدد في POSIX اسم "bashism". checkbashismsيُمكن استخدام البرنامج للتأكد من إمكانية تنفيذ نص برمجي في Debian Linux دون أي أخطاء في التوافق. [ 18 ] يُعدّ برنامج Vidar Holen's أداةً shellcheckأخرى لتحليل بنية النصوص البرمجية الثابتة ، مكتوبة بلغة Haskell، وتستطيع تحليل بنية النصوص البرمجية لضمان توافقها مع أيٍّ من لغات bash وdash وksh وBourne sh أو جميعها. [ 19 ]

تختلف متطلبات بناء الجملة لكل نوع من أنواع الصدف قليلاً. على سبيل المثال، تسمح سياسة دبيان ببعض الإضافات في نصوصها البرمجية (كما هو الحال في صدفة داش[ 20 ] بينما تكون النصوص البرمجية المصممة لدعم صدفات بورن ما قبل معيار POSIX، مثل أمر configure في autoconf ، محدودة أكثر في الميزات التي يمكنها استخدامها. [ 21 ]

أوضاع أخرى

الوضع المقيد

تُستخدم الصدفة المقيدة لإنشاء بيئة أكثر تحكمًا من الصدفة القياسية. تتصرف الصدفة المقيدة بشكل مطابق لـ bash باستثناء أن العديد من الإجراءات غير مسموح بها أو لا يتم تنفيذها، بما في ذلك:

  • تغيير الدلائل باستخدام الأمر cdالمدمج.
  • تحديد أو إلغاء تحديد قيم المتغيرات SHELL, PATH, HISTFILE, ENV, أو BASH_ENV.
  • تحديد أسماء الأوامر التي تحتوي على شرطات مائلة في واجهة سطر الأوامر.
  • استخدام مسارات الملفات المطلقة كوسيطات للأوامر .، historyأو ، أو .hash-p
  • تحديد مسار البحث باستخدام . -pأو .command-p
  • استيراد تعريفات الدوال وتحليل قيمة SHELLOPTSمن بيئة shell عند بدء التشغيل.
  • إعادة توجيه المخرجات باستخدام عوامل إعادة التوجيه >, >, <>, >&, &>, >>.
  • استخدام الأمر execالمدمج لاستبدال الصدفة بأمر آخر.
  • تعديل الأوامر المدمجة في الصدفة.

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

الوضع المميز

في Bash، يُعدّ "الوضع المميز" خيارًا نادر الاستخدام، موروثًا من واجهة سطر الأوامر SVR4.2 لنظام UNIX System V (حوالي عام 1992). [ n ] يمكن تفعيله باستخدام الأمر . [ p ]set-pset+p

عند تمكين الوضع المميز، SHELLOPTSتتضمن متغيرات الصدفة السلسلة "privileged".

وضع تصحيح الأخطاء الموسع

يتم تفعيلها bash --debuggerعند الاستدعاء أو أثناء الوضع التفاعلي أو غير التفاعلي. تستخدم برنامجًا منفصلاً يُسمى bashdb . [ 22 ] لا يتوفر extdebug في وضع POSIX. راجع الوثائق لمزيد من المعلومات. انظر أيضًا قسم تصحيح الأخطاء .shopt-sextdebug 

أوضاع التوافق

قدّم Bash 4.0 مفهوم مستوى توافق الصدفة، والذي يُحدد كمجموعة من الخيارات للأمر المدمج shopt (compat31، compat32، compat40، compat41، وهكذا). يوجد حاليًا مستوى توافق واحد فقط، وكل خيار فيه حصري للآخر. يهدف مستوى التوافق إلى تمكين المستخدمين من اختيار سلوك من الإصدارات السابقة غير متوافق مع الإصدارات الأحدث، وذلك أثناء ترحيل البرامج النصية لاستخدام الميزات والسلوكيات الحالية. وهو حل مؤقت .

دليل مرجعي لبرنامج GNU Bash

مراقبة

خيار xtrace

عند تفعيل xtrace ، تُطبع معلومات تصحيح الأخطاء البسيطة في الطرفية. يمكن تفعيله باستخدام `--` أو ` --`، وتعطيله باستخدام `--` أو `--` . تُقبل هذه الخيارات أيضًا في سطر الأوامر وعند علامات التجزئة: `--`، إلخ.set -o xtraceset -xset +o xtraceset +xset -#!/bin/bash -x

$ bash -x $ echo $(( 2 + 2 )) + echo 4 4 $ set -- 1 2 3 + set -- 1 2 3 $ printf '<%s>\n' " $@ " + printf '<%s>\n' 1 2 3 <1> <2> <3>

يتم تحديد إعدادات غلاف xtrace بواسطة POSIX. انظر أيضًا § تصحيح الأخطاء . 

الخيار المطوّل

يقوم خيار verbose بطباعة النصوص على الطرفية أثناء قراءتها، وقبل إجراء أي عمليات توسيع. نادرًا ما يُستخدم. [ r ]

تعليقات

يمكن أن تكون التعليقات وسيلة قيّمة لتوضيح المعلومات أو شرح نص برمجي أو ملف مصدر لشخص آخر قد لا يكون على دراية بنوايا كاتب النص البرمجي أو سياقه.

تُستخدم علامة # للإشارة إلى التعليقات القياسية في Bash . سيتم تجاهل أي نص يقع على يمين علامة # حتى نهاية السطر. يُسمح بالتعليقات المضمنة، ولكن لن تُطبع التعليقات التي تحتوي على علامة # أثناء تصحيح الأخطاء. انظر أيضًا: §  xtrace .

التعليقات التي تُشار إليها بعلامة النقطتين ( :) نشأت في بيئة Thompson shell . يتم تجاهل أي وسيطات تقع على يمين علامة النقطتين (:) المدمجة. التعليقات المضمنة غير ممكنة، ولكن التعليقات التي تُشار إليها بعلامة النقطتين (:) ستُطبع أثناء تصحيح الأخطاء، وسيتم توسيع أي معلمات. [ s ]

$ # تعريف foo $ foo = bar يظهر تعليق الهاش المضمن على نفس سطر الأمر $ set -x $ تعليق عادي (بدون مخرجات) $ : " ${ foo } " + : bar

رموز الخروج

عند تنفيذ أوامر باش، تُنتج رموز حالة الخروج$? ، والتي تُسمى أيضًا "رموز الإرجاع"، والتي تُقدم بعض المعلومات حول كيفية توقف البرنامج عن العمل. تُخزن قيمة رمز الخروج الأخير المُسجل في مُعامل الصدفة "علامة استفهام:" . في السياقات غير الحسابية (أي في معظم الأحيان)، تكون القيمة العددية أو " المنطقية " لـ "صحيح" صفرًا (0)، وقيمة "خطأ" واحدًا (1).

عند تنفيذ أمر نظام، يمكن عادةً إيجاد المعنى المقصود لحالة الخروج في صفحة الدليل الخاصة به؛ عادةً ما يشير الصفر إلى النجاح، بينما تشير حالة الخروج غير الصفرية إلى نوع من الفشل أو النجاح الجزئي. pingيُعدّ الأمر `select` أمرًا معروفًا بثلاثة رموز خروج ذات دلالة: 0 و1 و2.

في لغة باش، ضمن سياقات العمليات الحسابية، تنعكس قيم الصواب العددية: "صحيح" يساوي واحدًا و"خطأ" يساوي صفرًا. يمكن عادةً تحديد سياق العمليات الحسابية من خلال الصيغة `true` ((...))أو ` $((...))false`. إذا كانت نتيجة العملية الحسابية تساوي صفرًا، تُعتبر العملية "صحيحة"، ويكون رمز الخروج واحدًا. أما إذا كانت النتيجة أي عدد آخر غير الصفر، فتُعتبر العملية "خطأ"، ويكون رمز الخروج صفرًا.

لا توفر جميع أوامر Linux/UNIX رموز خروج ذات معنى تتجاوز الصفر والواحد، ولا يوجد نظام قياسي لتعريفات رموز الخروج في Linux.

$ true ; echo $? # رمز الخروج يعني "صحيح" 0 $ false ; echo $?; echo # رمز الخروج يعني "خطأ" 1 $ bash -c 'exit 99' ; printf 'exit-code: %d\n' $? exit-code: 99 $ (( 1 - 1 )) ; printf '%d\n' $? # رمز الخروج هذا يعني "صحيح" 1 $ (( 1 + 1 )) ; printf '%d\n' $? # ...ورمز الخروج هذا يعني "خطأ" 0

التحكم في الوظيفة

يحتوي Bash shell على نمطين لتنفيذ الأوامر: الدفعي (غير المتزامن)، والمتزامن (المتزامن). لتنفيذ الأوامر في النمط الدفعي (أي بالتسلسل)، يجب فصلها بالفاصلة المنقوطة (;) ، أو على أسطر منفصلة.

$ command1 ; command2 $ command3 

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

$ command1 &

أو لتنفيذ الأمر الأول والأمر الثاني بشكل متزامن ، يجب تنفيذهما في Bash shell بالطريقة التالية:

$ command1 & command2 

في هذه الحالة ، يُنفَّذ الأمر command1 في الخلفية، ويُعيد الرمز & التحكم الفوري إلى الصدفة التي تُنفِّذ الأمر command2 في المقدمة. يمكن إيقاف عملية ما وإعادة التحكم إلى bash بكتابة + أثناء تشغيل العملية في المقدمة. [ t ] يمكن الحصول على قائمة بجميع العمليات، سواءً في الخلفية أو المتوقفة، عن طريق تشغيل المهام :Ctrlz

$ jobs [1]- تشغيل الأمر 1 &

في المخرجات، يشير الرقم بين قوسين إلى مُعرّف المهمة. تشير علامة الجمع إلى العملية الافتراضية لكل من bg و fg . يشير النص "قيد التشغيل" و "متوقف" إلى حالة العملية . السلسلة الأخيرة هي الأمر الذي بدأ العملية.

يمكن تغيير حالة العملية باستخدام أوامر متنوعة. يُظهر الأمر fg عمليةً في المقدمة، بينما يُشغّل الأمر bg عمليةً متوقفةً في الخلفية. يقبل كل من bg و fg مُعرّف المهمة كوسيط أول لتحديد العملية المراد العمل عليها. في حال عدم وجود مُعرّف، يتم استخدام العملية الافتراضية، والتي يُشار إليها بعلامة زائد في مُخرجات الأمر jobs . يُمكن استخدام الأمر kill لإنهاء عملية قبل الأوان، عن طريق إرسال إشارة إليها . يجب تحديد مُعرّف المهمة بعد علامة النسبة المئوية (%).

$ sleep 100 & [1] 4904 $ kill %1 $ jobs [1]+ Terminated sleep 100

يتم تمكين التحكم في الوظائف، المعروف أيضًا باسم "وضع المراقبة"، بشكل افتراضي في واجهات المستخدم التفاعلية، ويمكن تعطيله باستخدام .set+m

الإشارات

الإشارات هي وسيلة للتواصل بين العمليات (IPC). أحيانًا، قد تتوقف عملية سطر الأوامر عن العمل في منتصف التنفيذ. في هذه الحالات، قد يكون من الضروري تحديد العملية المتوقفة وإنهاء العملية المتسببة بالمشكلة يدويًا.

في طرفية تفاعلية، يكفي عادةً الضغط على زر "+" لإنهاء العملية الحالية في المقدمة وإعادة التحكم إلى موجه المستخدم، أو الضغط على زر "+" لتعليقها. في بعض الأحيان، قد تنجح محاولة تعليق عملية ما عندما تبدو محاولات إلغائها غير مستجيبة. في حالات أخرى، قد يكون من الضروري استخدام برنامج "kill" لإرسال إشارة اتصال بين العمليات (IPC). في هذا المثال، نستخدم أمر "kill" من شاشة طرفية ثانية لإنهاء العملية ذات المعرّف 4331. Ctrlc Ctrlz

$ tty # الطرفية الأولى /dev/pts/0 $ whoami liveuser $ sleep 1000 # توقف الأمر
$ tty # الطرفية الثانية /dev/pts/1 $ whoami liveuser $ ps aux | grep -e sleep -e PID USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND liveuser 4331 0.0 0.0 230336 2312 pts/1 S+ 11:19 0:00 sleep 1000 liveuser 4333 0.0 0.0 231248 2516 pts/0 S+ 11:19 0:00 grep --color=auto -e sleep -e PID $ kill 4331 $ ps aux | grep -e sleep -e PID # انتهت عملية السكون USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND liveuser 4333 0.0 0.0 231248 2516 pts/0 S+ 11:19 0:00 grep --color=auto -e sleep -e PID
$ tty # الطرفية الأولى مرة أخرى /dev/pts/0 $ whoami liveuser $ sleep 1000 تم الإنهاء

في أنظمة التشغيل الشبيهة بنظام يونكس، يُسمح للمستخدم بتوجيه النواة لإرسال إشارة إلى عملية يملكها. لا يُسمح للمستخدم العادي بإرسال إشارة إلى عملية ذات صلاحيات. يمكن إرسال الإشارات إلى عملية باستخدام الأمر kill المدمج أو باستخدام ملف النظام الثنائي الذي يحمل نفس الاسم.

$ whoami liveuser $ ps aux | awk '$2 == "1"' # لنستعرض بعض المعلومات حول عملية النواة، العملية رقم 1. root 1 0.0 0.2 37140 20440 ? Ss 04:44 0:18 /usr/lib/systemd/systemd --switched-root --system --deserialize=53 rhgb $ kill -s SIGKILL 1 bash: kill: (1) - العملية غير مسموح بها $ type -a kill kill هو أمر مدمج في الصدفة kill هو /usr/bin/kill $ /usr/bin/kill -s SIGKILL 1 kill: فشل إرسال الإشارة إلى 1: العملية غير مسموح بها

يمكن عرض الإشارات الأكثر استخدامًا باستخدام [أداة/أداة] kill -L | head -n 4. ترتبط كل إشارة IPC برقم إشارة، لكن رموز الخروج ورموز الإشارات أمران مختلفان. فبينما سيؤدي إرسال إشارة IPC رقم 9 (إشارة "KILL") إلى إنهاء العملية فورًا في أغلب الأحيان، إلا أنه من غير المرجح أن تُرجع العملية رمز خروج 9.

في Bash، يرسل الأمر kill المدمج افتراضيًا إشارة TERM ("إنهاء"). من الشائع أن تستجيب أدوات سطر الأوامر لإشارة SIGTERM بالإغلاق والخروج بشكل سليم. (TERM و SIGTERM متطابقتان، ويمكن حذف البادئة SIG- من أسماء جميع الإشارات). يرسل التسلسل + في Bash إشارة SIGINT (إشارة مقاطعة) إلى العملية الأمامية. ويرسل التسلسل + إشارة SIGSTOP (إشارة إيقاف ) . [ u ] عندما تتلقى عملية ما إشارة SIGKILL ، فإنها تُنهى فورًا وبشكل غير منظم. يُنصح باستخدام SIGKILL كملاذ أخير فقط. [ 23 ] لا يمكن حظر إشارة SIGKILL أو التعامل معها .CtrlcCtrlz

يمكن للعمليات "التقاط" و"معالجة" إشارات الاتصال بين العمليات (IPC) التي تتلقاها. يستطيع المستخدم استخدام الأمر kill المدمج "لإرسال" إشارة IPC إلى عملية أخرى. يمكن لهذه العملية المستهدفة إعداد آلية، أو خطة مسبقة، لكيفية الاستجابة عند استقبال أي إشارة معينة، أو "التقاطها". تُعرف طريقة استجابة البرنامج المستهدف بكيفية "معالجة" البرنامج لاستقبال الإشارة. في صفحات الدليل (man pages)، يمكن ملاحظة كيف تقوم بعض أوامر النظام بطباعة معلومات معينة على الطرفية عند استقبالها إشارة SIGHUP ، على سبيل المثال، الأمر dd . [ 24 ]

عندما يكون باش تفاعليًا، وفي حال عدم وجود أي مقاطعات، فإنه يتجاهل إشارة SIGTERM (حتى لا يُنهي جلسة تفاعلية)، ويلتقط إشارة SIGINT ويتعامل معها (حتى يكون أمر الانتظار المدمج قابلاً للمقاطعة). عندما يتلقى باش إشارة SIGINT ، فإنه يخرج من أي حلقات تنفيذ جارية. في جميع الحالات، يتجاهل باش إشارة SIGQUIT . إذا كان التحكم في العمليات مُفعّلاً، فإن باش يتجاهل إشارات SIGTTIN و SIGTTOU و SIGTSTP . [ 25 ]kill0

bash(1)

بشكل افتراضي، تستقبل نصوص Bash البرمجية وتستجيب لجميع إشارات الاتصال بين العمليات (IPC) المرسلة إليها، ومع ذلك، يمكن لنصوص Bash البرمجية استخدام وظيفة trap المدمجة لالتقاط الإشارات ومعالجتها. [ 26 ]

$ cat ./trap-example.sh # ! /usr/bin/env bash trap umask EXIT echo bar exit 0 $ chmod 0700 trap-example.sh $ ./trap-example.sh bar 0077

توجد بعض الإشارات التي لا تتوفر إلا من داخل Bash كامتدادات GNU: ERR و EXIT و RETURN و DEBUG . تُفيد هذه الإشارات في تصحيح الأخطاء، ولا يمكن إرسالها أو معالجتها إلا بواسطة الأوامر المدمجة في الصدفة. انظر أيضًا قسم تصحيح الأخطاء . 

قيم المعلمات

توجد العديد من التطبيقات المختلفة للأمر echo . بعضها يدعم خيار printf، وبعضها الآخر لا يدعمه. [ v ] قائمة الخيارات ليست موحدة بين التطبيقات، على الرغم من أن كلاً من echo و printf مُحددان في معيار POSIX. إذا أراد مبرمج معرفة القيمة الدقيقة لسلسلة نصية مُخزنة في متغير، فإن الطريقة الأكثر اتساقًا للقيام بذلك هي استخدام printf .-e

بالنسبة لأي سلسلة نصية تحتوي على أي حرف بما في ذلك الأرقام، يكون مُحدد التنسيق هو %s .

$ foo = abc bar = 123 $ printf '<%s>\n' " ${ foo } " " ${ bar } " <abc> <123>

بالنسبة للأرقام فقط، يكون مُحدد التنسيق هو %d .

$ printf '<%d>\n' " ${ foo } " " ${ bar } " bash: printf: abc: رقم غير صالح <0> <123>

في المثال أدناه، حيث تم حذف سطر جديد من سلسلة التنسيق، تتم طباعة قيمة PS1 على نفس سطر مخرجات الأمر السابق.

$ printf '<%s>' " ${ foo } " " ${ bar } " <abc><123>$

هناك طريقة أخرى فعّالة للغاية وهي استخدام . يمكن إعادة استخدام مخرجات كمدخلات. مع ذلك، لا يمكن طباعة جميع المتغيرات والمعاملات باستخدام ، على سبيل المثال، قيم المعاملات الخاصة. يُشير تجزئة المعاملات الخاصة، ، إلى عدد المعاملات الموضعية المُعرّفة حاليًا.declare-pdeclare-pdeclare-p"$#"

$ declare -p foo bar declare -- foo="abc" declare -- bar="123" $ set -- $ declare -p " $# " bash: declare: 0: not found

للحصول على سلسلة كاملة من المدخلات في واجهة سطر الأوامر التفاعلية...

$ declare -p #

...سيفسر Bash رمز التجزئة كتعليق مضمن. بعد إزالة التعليق وكل النص الموجود على يمينه، سينفذ Bash الأمر التالي . سيعرض هذا الأمر، وفقًا لـ ، "قيم وخصائص كل اسم"، أي كل متغير، و"إذا لم يتم تحديد أسماء، فسيعرض قيم وخصائص جميع المتغيرات"، وهو ما قد يتجاوز 100 سطر من المخرجات.declare-phelp declare

من ناحية أخرى، لا يمكن لدالة printf عرض خصائص المتغيرات. انظر أيضًا قسم تصحيح الأخطاء . 

$ readonly foo $ declare -p foo declare -r foo="abc" $ printf '<%s>' " ${ foo } " <abc>$

بيئة

بيئة (بيئات) التنفيذ القابلة للتكوين: [ w ]

  • ملفات بدء تشغيل الصدفة والجلسة مثل (أي ~/.bashrcملفات dotfiles~/.profile
  • الإعدادات ( set built-in ) وخيارات الصدفة ( shopt built-in ) التي تغير سلوك الصدفة؛

ملفات بدء تشغيل النظام والجلسة (المعروفة أيضًا باسم "ملفات النقطة")

عند بدء تشغيل Bash، يقوم بتنفيذ الأوامر في مجموعة متنوعة من ملفات النقطة . [ 15 ] على عكس نصوص Bash البرمجية، لا تحتوي ملفات النقطة عادةً على إذن التنفيذ مفعل ولا توجيه للمفسر مثل #!/bin/bash.

  • مثال بدء تشغيل Bash متوافق مع الأنظمة القديمة

المثال ~/.bash_profileأدناه متوافق مع Bourne shell ويُعطي دلالات مشابهة لـ csh بالنسبة لـ `.` ~/.bashrcو ` ~/.bash_login.` عبارة عن تقييم مختصر يتحقق مما إذا كان اسم الملف موجودًا وقابلًا للقراءة، ويتخطى الجزء الذي يلي `` إذا لم يكن كذلك.[ -r filename ] && cmd&&

[ -r ~/.profile ] && . ~/.profile # إعداد البيئة، مرة واحدة، باستخدام صيغة Bourne-sh فقط إذا [ -n " ​​$PS1 " ] ; ثم # هل نحن في وضع تفاعلي؟ [ -r ~/.bashrc ] && . ~/.bashrc # إعداد tty/prompt/function للأصداف التفاعلية [ -r ~/.bash_login ] && . ~/.bash_login # أي مهام at-login لصدفة تسجيل الدخول فقط fi # نهاية كتلة "if"
  • مشاكل نظام التشغيل في بدء تشغيل Bash

تحتوي بعض إصدارات يونكس ولينكس على نصوص برمجية لبدء تشغيل نظام باش، عادةً ما تكون موجودة في الدليل ` //etc bash/bash.bash`. يُنفّذ باش هذه الملفات كجزء من عملية التهيئة القياسية، ولكن قد تقرأ ملفات بدء التشغيل الأخرى هذه الملفات بترتيب مختلف عن تسلسل بدء تشغيل باش الموثق. قد يُعاني المحتوى الافتراضي لملفات المستخدم الجذر من مشاكل أيضًا، بالإضافة إلى الملفات الأساسية التي يُوفرها النظام لحسابات المستخدمين الجدد عند الإعداد. قد تُجري نصوص بدء التشغيل التي تُشغّل نظام نوافذ X أيضًا تغييرات غير متوقعة على نصوص بدء تشغيل باش الخاصة بالمستخدم في محاولة لضبط متغيرات بيئة المستخدم قبل تشغيل مدير النوافذ . يُمكن غالبًا معالجة هذه المشاكل باستخدام ~/.xsessionملف `/bash.bash.bash` ~/.xprofileلقراءة ` ~/.profile/bash.bash.bash`، الذي يُوفر متغيرات البيئة التي تحتاجها نوافذ باش التي يتم إنشاؤها من مدير النوافذ، مثل xterm أو Gnome Terminal .

البث القياسي

التدفقات القياسية - STDIN و STDOUT و STDERR

الأوامر

أوامر النظام

الأسماء المستعارة

تسمح الأسماء المستعارة باستبدال سلسلة نصية بكلمة موجودة في موضع في المدخلات بحيث يمكن أن تكون الكلمة الأولى في أمر بسيط. للأسماء المستعارة أسماء وقيم مقابلة يتم تعيينها وإلغاء تعيينها باستخدام الأوامر المدمجة alias و unalias. [ x ]

دليل مرجعي لبرنامج GNU Bash

الكلمات المفتاحية والكلمات المحجوزة

  • function
    • لا تتوافق تعريفات وظائف Bash التي تتضمن هذه الكلمة المفتاحية المحددة مع نصوص Bourne/Korn/POSIX، ومع ذلك، فإن Bash يقبل صيغة تعريف الوظيفة المستخدمة بواسطة Bourne وKorn وPOSIX-compliant shells.

الوظائف

تُعدّ دوال الصدفة طريقةً لتجميع الأوامر لتنفيذها لاحقًا باستخدام اسم واحد للمجموعة. ويتم تنفيذها تمامًا مثل أي أمر بسيط. فعند استخدام اسم دالة صدفة كاسم أمر بسيط، تُنفّذ الصدفة قائمة الأوامر المرتبطة بهذا الاسم. تُنفّذ دوال الصدفة في سياق الصدفة الحالي؛ ولا يتم إنشاء أي عملية جديدة لتفسيرها. [ y ]

دليل مرجعي لبرنامج GNU Bash

الأوامر المدمجة

  • أوامر مدمجة متنوعة:
    • وظائف POSIX الخاصة المدمجة: [ z ]
      • cd ، pwd ، إلخ.
    • مجموعة [ o ]
      • Xtrace: [ | ]. الوسيلة الأساسية لتصحيح الأخطاء في الصدفة. يمكن إيقاف كل من xtrace و verbose في الوقت نفسه باستخدام الأمر .set-xset-oxtraceset-
      • الوضع المطوّل: [ | ]. يطبع الأمر في الطرفية أثناء قراءته بواسطة باش. يقرأ باش جميع البنى دفعة واحدة، مثل الأوامر المركبة التي تتضمن كتل if-fi و case-esac. إذا تم تضمين a داخل أمر مركب، فسيتم تفعيل "الوضع المطوّل" في المرة التالية التي يقرأ فيها باش التعليمات البرمجية كمدخلات، أي بعد انتهاء البنية قيد التنفيذ حاليًا. [ 27 ]set-vset-overboseset-v
      • يمكن إيقاف كل من xtrace و verbose في نفس الوقت باستخدام الأمر .set-
    • shopt [ 28 ]
      • توسيع الأسماء المستعارة: مُفعّل افتراضيًا في واجهات الأوامر التفاعلية. بعض المطورين لا ينصحون باستخدامه في البرامج النصية.

مسار النظام وأوامر النظام

عندما يبحث نظام التشغيل عن أوامر خارجية، فإنه يعتمد على متغير Bourne shell $PATH. $PATHيحتوي هذا المتغير على قائمة بالمجلدات مفصولة بنقطتين رأسيتين :. يبدأ البحث من المجلد الأيسر، ويتم اختيار المجلدات بنمط من اليسار إلى اليمين، حيث يتم البحث في كل مجلد حتى يتم العثور على تطابق. في نظام Linux، ولتمكين المستخدم من تحديد مواقع أوامر إضافية، من الممارسات الشائعة لدى مديري التوزيعات ومطوري الحزم تعديل قيمة متغير المستخدم النهائي $PATHبإضافة ملفات المصدر إلى هذا المتغير /etc/profile.dومواقع أخرى.

عند البحث عن الأمر، chmodعلى سبيل المثال، بعد النظر في الأوامر الداخلية وعدم العثور على أي شيء، سيبحث Bash في الدلائل الموجودة في $PATHويختار المسار المطلق لأول ملف تنفيذي يتم العثور عليه والذي يتطابق اسمه الأساسي مع سلسلة البحث. [ 12 ]

إذا كان هناك أكثر من أمر echoمتاح في الدلائل المدرجة $PATH، فسيتم افتراضيًا اختيار الأمر الأول الذي تم العثور عليه فقط أثناء عملية تحليل وتنفيذ سطر الأوامر. $PATHعمليات البحث بطيئة. يُسرّع الصدفة عملية تنفيذ سطر الأوامر عن طريق حفظ مواقع الأوامر في جدول تجزئة. لإجراء بحث كامل $PATHدون أي تدخل من جدول التجزئة، احذف الجدول الحالي باستخدام الأمر `delete` ، ثم ابحث عن جميع أنواع الأوامر باستخدام الأمر `request` .hash-rtype-a

$ # فرض البحث في المسار الكامل $ PATH = ${ PATH } : ${ HOME } $ printf 'echo script_file: "$@"\n' > ./echo $ chmod 0700 ./echo $ hash -r ; type -a echo echo is a shell builtin echo is /usr/bin/echo echo is /home/liveuser/echo

لتنفيذ سطر أوامر يحتوي على أمر موجود لاحقًا في $PATHالسلسلة، يمكنك تحديد مسار مطلق أو يمكنك تثبيت حل المسار بالنسبة إلى دليل العمل الحالي.

$ /home/liveuser/echo foo script_file: foo $ ./echo bar script_file: bar

لأسباب أمنية، يُنصح بالتأكد من أن الدلائل الموجودة في PATH غير قابلة للكتابة من قبل الجميع، أو قابلة للكتابة فقط من قبل المستخدم الجذر والمستخدمين الموثوق بهم.

البحث عن الأوامر

هياكل التحكم

الأغلفة الفرعية

الأغلفة الفرعية : (...)؛

خطوط الأنابيب

مع ذلك، باستخدام خط الأنابيب، يمكنهم تنفيذ دورات حسابية متعددة في الوقت نفسه، مما يزيد من سرعتهم بشكل ملحوظ. في وحدة تحكم خط الأنابيب، تمر تعليمات مختلفة بالعملية في آن واحد، ولكن في نقاط مختلفة. فبينما يتم جلب تعليمة، يتم فك تشفير تعليمة أخرى، وهكذا. خطوط الأنابيب على نمط يونكس :|

عوامل التشغيل المنطقية

  • و ( &&)
  • أو ( ||)
  • لا ( !)

يُوفّر باش فواصل أوامر "التنفيذ المشروط" التي تجعل تنفيذ أمر ما مشروطًا برمز الخروج الذي يُحدّده أمر سابق. على سبيل المثال:

انتقل إلى " $SOMEWHERE " ثم نفّذ الأمر ./do_something أو اطبع "حدث خطأ" > & 2

يتم تنفيذ الأمر ./do_somethingفقط إذا كان الأمر cd (تغيير الدليل) "ناجحًا" (أعاد حالة خروج صفر) ولن يتم تنفيذ الأمر echo إلا إذا أعاد الأمر cd أو الأمر "خطأ" (حالة خروج غير صفرية)../do_something

التكرار

التكرار: في بعض الأحيان، تُكرر البرامج إلى أجل غير مسمى أو حتى يتم الوصول إلى نتيجة محددة. كل تنفيذ للتعليمات هو "تكرار". [ 29 ]

  • أوامر الحلقات المركبة while و until و select ؛
  • أوامر مركبة لحلقات التكرار من نوع C الحسابي وقائمة التعداد ؛ و
  • أوامر التحكم في التدفق: الاستمرار ، والتوقف ، والعودة ، والخروج ؛

الأوامر المركبة

المركب: شيء يتكون من اتحاد عناصر أو أجزاء. [ 30 ]

قاموس ميريام-ويبستر الجامعي

يدعم Bash أيضًا أشكالًا مختلفة من تقييم الأوامر الشرطية. [ ab ]if...ficase...esac

الاختبار

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

  • أمر الاختبار التقليدي ،
  • اختبار القوس الواحد التقليدي: [،
  • اختبار الأقواس المزدوجة الحديث: والذي يتضمن ميزات متقدمة: [[...]]
  • ((...))التقييم والاختبار العددي؛ وهذا يشمل جميع عوامل التشغيل في لغة "C" تقريبًا للمقارنة الحسابية والعددية؛

بالنسبة لجميع الأوامر، يتم تخزين حالة الخروج في متغير خاص $?.

التعبيرات النمطية

يدعم Bash 3.0 مطابقة التعبيرات النمطية داخل العملية باستخدام صيغة تُشبه صيغة Perl . [ 32 ] تقتصر مطابقة التعبيرات النمطية على السلاسل النصية الموجودة على يمين المعامل =~في [[..]]بنية الاختبار الموسعة. [ ac ]

[[${line}=~[[:space:]]*(a)?b]]يعني ذلك أن القيم الخاصة بالسطور مثل 'aab' و 'aaaaaab' و 'xaby' و 'ab' ستتطابق جميعها، وكذلك السطر الذي يحتوي على 'b' في أي مكان في قيمته.

العمليات المشتركة

العملية المساعدة هي أمر برمجي مسبوق بالكلمة المحجوزة coproc. تُنفَّذ العملية المساعدة بشكل غير متزامن في غلاف فرعي، كما لو أن الأمر قد تم إنهاؤه باستخدام عامل التحكم '&'، مع إنشاء قناة اتصال ثنائية الاتجاه بين الغلاف المنفذ والعملية المساعدة. [ إعلان ]

دليل مرجعي لبرنامج GNU Bash

معالجة البيانات

تقسيم الكلمات

تقسيم الكلمات إلى كلمات (أي تقسيم الكلمات )

نقلاً عن

عند الشك، اقتبس! [ 33 ]

إتقان كتابة البرامج النصية في نظام لينكس، بقلم أندرو ماليت

يحتوي باش على قواعد معينة للاقتباس : استخدامات

  • اقتباسات مفردة'...'
  • علامات اقتباس مزدوجة"..."
  • الخطوط المائلة العكسية \، و
  • اقتباس ANSI-C $'...'.

انظر أيضًا §  المواقع ،$"..."

انظر أيضًا علامات الاقتباس الخلفية `...`: §  صيغة مهملة .

يونيكود

دعم ترميز Unicode و ANSI-C للاقتباس.echo-e

توسيع الدعامة

$ echo kernel { ,-headers } kernel kernel-headers

توسيع الأقواس، أو ما يُسمى أيضًا بالتناوب، ميزة مُستنسخة من واجهة سطر الأوامر C. تُولّد هذه الميزة مجموعة من التركيبات البديلة. [ ae ] لا يشترط وجود النتائج المُولّدة كملفات. لا يتم فرز نتائج كل سلسلة مُوسّعة، ويُحافظ على الترتيب من اليسار إلى اليمين.

$ echo a { p,c,d,b } e ape ace ade abe $ echo { a,b,c }{ d,e,f } ad ae af bd be bf cd ce cf

لا ينبغي للمستخدمين استخدام توسيعات الأقواس في البرامج النصية المحمولة، لأن Bourne shell لا ينتج نفس المخرجات.

$ # صدفة باش $ /bin/bash -c 'echo a{p,c,d,b}e' ape ace ade abe $ # لا تُنتج الصدفة التقليدية نفس المخرجات $ /bin/sh -c 'echo a{p,c,d,b}e' a{p,c,d,b}e

عند دمج توسيع الأقواس مع الأحرف البديلة، يتم توسيع الأقواس أولاً، ثم يتم استبدال الأحرف البديلة الناتجة بشكل طبيعي. وبالتالي، يمكن الحصول على قائمة بصور JPEG وPNG في المجلد الحالي باستخدام:

ls *. { jpg,jpeg,png } # يتوسع إلى *.jpg *.jpeg *.png – وبعد ذلك، # تتم معالجة الأحرف البديلة echo *. { png,jp { e, } g } # يعرض echo التوسعات فقط – # ويمكن استخدام الأقواس داخل الأقواس.

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

$ echo { 1 ..10 } 1 2 3 4 5 6 7 8 9 10 $ echo { 01 ..10 } 01 02 03 04 05 06 07 08 09 10 $ echo file { 1 ..4 } .txt file1.txt file2.txt file3.txt file4.txt $ echo { a..e } abcde $ echo { 1 ..10..3 } 1 4 7 10 $ echo { a..j..3 } adgj

عند دمج توسيع الأقواس مع توسيع المتغيرات (المعروف أيضًا بتوسيع المعلمات واستبدال المعلمات )، يتم تنفيذ توسيع المتغيرات بعد توسيع الأقواس، الأمر الذي قد يستلزم في بعض الحالات استخدام الدالة المضمنة eval ، على النحو التالي:

$ start = 1 ; end = 10 $ echo { $start .. $end } # فشل التوسيع بسبب ترتيب التقييم {1..10} $ eval echo { $start .. $end } # يحدث توسيع المتغير ثم يتم تقييم السلسلة الناتجة 1 2 3 4 5 6 7 8 9 10

توسيع علامة التلدة

توسيع المعلمات والمتغيرات

  • يكتب
  • معلمات الصدفة
  • متغيرات البيئة
  • متغيرات المستخدم
  • نِطَاق
  • المصفوفات
  • توسيع المعلمات
    صيغ التوسيع التي يمكنها أداء بعض المهام بشكل أسرع من الأدوات الخارجية، بما في ذلك، على سبيل المثال لا الحصر:
    • استبدال النمط
      • ${foo//x/y}ل ،sed 's/x/y/g'
    • إزالة نمط البادئة أو اللاحقة المتطابق
      • ${bar##[a-zA-Z0-9]*}ل cut -c8-،
    • تعداد مفاتيح المصفوفة
      • ${!array[@]}، و
    • عرض خطأ في حالة القيمة الفارغة أو غير المُعيّنة
      • ${var:?error message}،

توسيع مسار الملف

توسيع مسار الملف، أي استخدام نمط مطابقة الأنماط (globbing ) ونمط shell باستخدام , , . [ af ]*?[...]

المواقع

الترجمة الخاصة بكل لغة باستخدام $"..."صيغة الاقتباس. [ ag ]

إعادة توجيه العمليات وتحليلها

استبدال الأوامر

استبدال الأمر : ،$(...)

عملية الاستبدال

استبدال العمليات ، أو عندما يدعم النظام ذلك:<()>()

يدعم Bash استبدال العمليات باستخدام الصيغة `--` و`-- `، والتي تستبدل مخرجات (أو مدخلات) أمرٍ ما حيث يُستخدم اسم ملف عادةً. (يتم تنفيذ ذلك من خلال أنابيب غير مسماة `/proc/fd/` على الأنظمة التي تدعم ذلك، أو عبر أنابيب مسماة مؤقتة عند الضرورة).<(command)>(command)

التقييم الحسابي

الأمر الحسابي، ((...))أو التوسع الحسابي ، بما في ذلك$((...))

يستطيع Bash إجراء العمليات الحسابية على الأعداد الصحيحة ("التقييم الحسابي") دون الحاجة إلى تشغيل عمليات خارجية. ويستخدم لهذا الغرض ((...))الأمر وصيغة التوسيع.$((...))

إعادة التوجيه

يتم إجراء عمليات إعادة توجيه لتدفقات بيانات الإدخال القياسي والإخراج القياسي والخطأ القياسي ، بما في ذلك

  • كتابة الملفات، >وإلحاقها >>،
  • هنا<< الوثائق ،
  • هنا السلاسل النصية، <<<التي تسمح باستخدام المعلمات كمدخلات، و
  • عامل إعادة التوجيه، >|والذي يمكنه فرض الكتابة فوق ملف عند تمكين إعداد noclobber الخاص بالصدفة؛

يُسهّل تركيبها إعادة توجيه الإدخال/الإخراج . على سبيل المثال، يُمكنها إعادة توجيه المخرجات القياسية (stdout) والخطأ القياسي (stderr) في آنٍ واحد باستخدام &>المعامل `--`. هذا أسهل كتابةً من نظيره في Bourne shell . يدعم Bash المستندات المُضمنة . منذ الإصدار 2.05b، يُمكن لـ Bash إعادة توجيه المدخلات القياسية (stdin) من "سلسلة مُضمنة" باستخدام المعامل `--`.command>file2>&1<<<

تحليل الأوامر

  1. يتم تجاهل التعليقات، من علامة التجزئة #(#) غير المقتبسة إلى نهاية نفس السطر؛ [ 34 ] [ 35 ]
  2. يتم تحليل الأوامر سطرًا سطرًا:
    • يتم احترام هياكل الرقابة، و
    • كما يتم احترام علامات الهروب (الشرطة المائلة العكسية) \في نهايات الأسطر؛
  3. قم بتقسيم النص إلى كلمات (أي تقسيم الكلمات ) وفقًا لقواعد الاقتباس ،
    • بما في ذلك الاقتباس وفقًا لمعيار ANSI-C $'...'؛
  4. يتم تنفيذ سبعة أنواع من عمليات التوسيع بالترتيب التالي على السلسلة الناتجة:
    1. (النوع 1) توسيع الدعامة kernel{-headers}،
    2. (النوع 2) توسيع علامة التلدة ~،
    3. من اليسار إلى اليمين:
    4. تقسيم الكلمات (مرة أخرى)،
    5. (النوع 7) توسيع مسار الملف، أي، مطابقة الأنماط باستخدام نمط shell *، ، ?، [...]، [ af ]
    6. إزالة الاقتباس ؛
  5. يتم إجراء عمليات إعادة توجيه لتدفقات بيانات الإدخال القياسي والإخراج القياسي والخطأ القياسي . انظر أيضًا قسم  إعادة التوجيه أعلاه.
  6. يتم إجراء بحث عن اسم الأمر. انظر أيضًا قسم "  البحث عن الأمر" أعلاه.
  7. يتم تنفيذ السلسلة الناتجة كأمر.

ميزات تفاعلية فقط

سجل الأوامر

سجل أوامر غير محدود الحجم . هذه الميزة متاحة في الوضع التفاعلي فقط. [ الذكاء الاصطناعي ]

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

تتوفر ميزة مكدس الدليل ( pushdوالميزات المدمجة) في الوضع التفاعلي فقط.popd

إكمال قابل للبرمجة

يُعرف أيضًا باسم "إكمال علامة التبويب" أو " إكمال سطر الأوامر "، فعندما يضغط المستخدم على مفتاح Tab، يستخدم Bash تلقائيًا أي نصوص برمجية متاحة للإكمال لاقتراح أسماء البرامج والملفات والمتغيرات التي كُتبت جزئيًا. [ aj ] يتميز نظام إكمال سطر الأوامر في Bash بمرونة عالية وقابلية للتخصيص، وغالبًا ما يأتي مزودًا بوظائف تُكمل الوسائط وأسماء الملفات لبرامج ومهام محددة.Tab

يدعم Bash الإكمال القابل للبرمجة عبر الأوامر المدمجة completeو compoptو . [ 36 ] هذه الميزة متاحة منذ الإصدار التجريبي 2.04 الذي صدر عام 2000.compgen

تتيح هذه الأوامر تحديدًا معقدًا وذكيًا لإكمال الأوامر (مثل البرامج المثبتة) والوظائف والمتغيرات وأسماء الملفات. [ 37 ]

يُحدد الأمران complete`and` compoptكيفية عرض وسائط بعض الأوامر أو الخيارات المتاحة في مُدخلات `readline`. بدءًا من الإصدار 5.1، يتم تفعيل إكمال الأمر أو الخيار عادةً بالضغط على مفتاح الإدخال بعد كتابة اسمه. [ 37 ] هذه الميزة متاحة في الوضع التفاعلي فقط. Tab

المطالبات

مطالبات قابلة للتخصيص . هذه الميزة متاحة في الوضع التفاعلي فقط.

الوثائق

دليل المستخدم

يُقدّم مشروع جنو " دليل مستخدم" [ 11 ] لـ Bash. ويُعتبر أحيانًا وثيقةً أسهل استخدامًا من صفحة الدليل (man page). "يمكنك أيضًا العثور على معلومات حول Bash... من خلال البحث في `/bash/bash` /usr/share/doc/bashأو /usr/local/share/doc/bash`/bash/bash` أو ما شابهها على نظامك." [ 38 ] في أنظمة جنو/لينكس، إذا كان برنامج `info` متوفرًا، فيجب أن يكون إصدار دليل جنو المناسب لتثبيتك متوفرًا أيضًا في `/bash/bash` . [ 11 ] [ 39 ]info bash

صفحة الدليل

يُعدّ الدليل التقني الأحدث، أو "صفحة الدليل" ، الوثيقة التقنية التفسيرية المعتمدة لفهم كيفية عمل باش. في أنظمة جنو/لينكس، يتوفر الإصدار المناسب لتثبيتك عادةً من خلال برنامج الدليل على الرابط التالي : [ 25 ]manbash

مساعدة مدمجة

مع الإصدارات الحديثة من Bash، يمكن العثور على معلومات حول أوامر shell المدمجة عن طريق تنفيذ help، أو في موجه طرفي حيث تم تثبيت bash.help[nameofbuiltin]man builtins

يمكن استدعاء أمر printf عبر env لضمان تشغيل البرنامج الموجود عبر مسار البحث الخاص بالصدفة، وليس اسمًا مستعارًا للصدفة أو وظيفة مدمجة: . [ 40 ]envprintf--help

مواصفات POSIX

لغرض تمكين التوافق بين برامج الصدفة المختلفة التي تعمل على أنظمة تشغيل متنوعة، تؤثر مواصفات POSIX [ 8 ] على كيفية كتابة الصدفات الحديثة الشبيهة بنظام UNIX. يُقصد بـ Bash أن يكون تطبيقًا متوافقًا مع قسم "الصدفة والأدوات المساعدة" من مواصفات IEEE POSIX (معيار IEEE 1003.1). [ ak ] أحدث إصدار من المعيار (2024) متاح على الإنترنت.

باعتبارها المعيار الذي يستند إليه bash، فإن معيار POSIX، أو IEEE Std 1003.1، مفيد بشكل خاص.

مصادر إضافية

"يحتوي القائم على صيانة المشروع أيضًا على صفحة Bash تتضمن الأسئلة الشائعة"، [ 38 ] [ 41 ] [ 42 ] هذه الأسئلة الشائعة محدثة اعتبارًا من إصدار bash 5.1 ولم تعد تُحدَّث.

تتوفر قنوات دعم غير رسمية عبر IRC على libera.chat، في قناة #bash، كما تتوفر قوائم بريدية. [ 7 ]

الأمن ونقاط الضعف

البرامج النصية الجذرية

لطالما وُجهت انتقادات واسعة النطاق لتشغيل أي نصوص برمجية (shell scripts) بصلاحيات المستخدم الجذر، باعتبارها ممارسة أمنية سيئة. أحد الأسباب الشائعة لذلك هو أنه عند تنفيذ نص برمجي بصلاحيات المستخدم الجذر، تتفاقم الآثار السلبية لأي خلل فيه بسبب هذه الصلاحيات المرتفعة.

أحد الأمثلة الشائعة: يحتوي نص برمجي على الأمر، ولكن المتغير غير مُعرَّف. في لينكس، إذا نُفِّذ النص البرمجي بواسطة مستخدم عادي، فستحاول الصدفة تنفيذ الأمر كمستخدم عادي، وسيفشل الأمر. أما إذا نُفِّذ النص البرمجي بواسطة المستخدم الجذر، فمن المرجح أن ينجح الأمر وسيتم مسح نظام الملفات.rm-rf${dir}/$dirrm -rf /

يُنصح باستخدام sudo على أساس كل أمر على حدة.

نصوص CGI

تُعدّ نصوص CGI مصدرًا هامًا للثغرات الأمنية. [ 43 ] [ 44 ] [ 45 ]

تقييم مدمج

"إن أمر التقييم قوي للغاية وسهل إساءة استخدامه للغاية." [ 46 ]

التحقق من صحة المدخلات

" التحقق من صحة المدخلات هو عملية التأكد من أن البيانات قد خضعت لعملية تنظيف البيانات للتأكد من جودتها، أي أنها صحيحة ومفيدة."

تُجرى عملية التحقق من صحة المدخلات لضمان دخول البيانات الصحيحة فقط إلى سير العمل في نظام المعلومات، مما يمنع تراكم البيانات غير الصحيحة في قاعدة البيانات وتسببها في أعطال في مختلف المكونات اللاحقة. ينبغي إجراء التحقق من صحة المدخلات في أقرب وقت ممكن من تدفق البيانات، ويفضل فور استلام البيانات من الجهة الخارجية. [ 47 ]

ورقة غش للتحقق من صحة المدخلات من OWASP

صدمة القذائف

في سبتمبر 2014، تم اكتشاف ثغرة أمنية في البرنامج، أُطلق عليها اسم " شل شوك ". وسرعان ما أدى الكشف العلني عنها إلى سلسلة من الهجمات عبر الإنترنت . [ 48 ] [ 49 ] [ 50 ]

قد يُتيح استغلال هذه الثغرة تنفيذ تعليمات برمجية عشوائية في نصوص CGI التي تُنفذها بعض إصدارات Bash. وتتعلق هذه الثغرة بكيفية تمرير Bash لتعريفات الدوال إلى الأصداف الفرعية عبر متغيرات البيئة . [ 51 ] وقد وُجدت هذه الثغرة في شفرة المصدر منذ أغسطس 1989 (الإصدار 1.03) [ 52 ] وتم إصلاحها في سبتمبر 2014 (الإصدار 4.3).

تم توفير تحديثات لإصلاح الأخطاء بعد وقت قصير من اكتشافها. يُنصح بشدة بالترقية إلى أحدث إصدار.

تم تخصيص معرّفات الثغرات الأمنية الشائعة لها ، وهي CVE- 2014-6271 و CVE- 2014-6277 و CVE- 2014-7169 ، من بين معرّفات أخرى. وبحسب معايير CVSS 2.x و3.x، تُصنّف هذه الثغرة على أنها "عالية" و"حرجة" على التوالي.

بناء جملة مهمل

  • استبدال الأوامر بنمط علامة الاقتباس المائلة : تم إيقاف استخدامه [ am ] لصالح: `...`
    • $(...)؛
  • استخدام " -aأو " -oفي أوامر test" [/" ،[[
    • على سبيل المثال، تم إهمال [ ao ] لصالح: [-r./file-a!-l./file]
      • [-r./file]&&![-l./file]؛
  • يُفضّل عدم استخدام الصيغة الحسابية [ ap ] لصالح: $[...]
    • $((...))أو
    • ((...))، حسب الاقتضاء؛
  • تم إيقاف استخدام [ aq ]^ كخط أنابيب لصالح ;|

تصحيح الأخطاء

جدول الميزات

ميزات Bash التي يمكن أن تكون مفيدة أثناء تصحيح الأخطاء. [ 55 ]
ميزة بوسيكس 2024 وصف إصدار باش.
نوع القواعد الاسم الرسمي بناء الجملة
أداة مدمجة خاصةضبط / xtrace set-xنعم الوسيلة الأساسية لتصحيح الأخطاء في الصدفة .

"يكتب إلى الخطأ القياسي تتبعًا لكل أمر بعد توسيع الأمر وقبل تنفيذه."

؟
المعايير الخاصةحالة الخروج "$?"نعم "يمتد إلى أقصر تمثيل لحالة الخروج العشرية." ؟
توسيع المعلماتحدد القيمة الفارغة أو غير المُعينة "${parameter:?[word]}"نعم "حيث يتم كتابة توسيع [word]، ربما رسالة خطأ أو رقم سطر، إلى الخطأ القياسي ويخرج الصدفة برمز خروج غير صفري." ؟
المعايير الخاصةمعرّف العملية (PID) للصدفة المستدعاة "$$"نعم "يتوسع إلى أقصر تمثيل لمعرف العملية العشري للصدفة المستدعاة." ؟
أداة مدمجة خاصةضبط / مطول set-vنعم "يكتب مدخلاته إلى الخطأ المعياري أثناء قراءته." ؟
أداة مدمجة خاصةضبط / فشل الأنبوب set-opipefailنعم "استنتج حالة الخروج لخط الأنابيب من حالات الخروج لجميع الأوامر الموجودة في خط الأنابيب، وليس فقط الأمر الأخير (الأيمن)." ؟
أداة مدمجة خاصةمجموعة / اسم set-uنعم عند تفعيل هذا الخيار، سيؤدي ذلك إلى خروج الصدفة مع رسالة خطأ عند مصادفتها لتوسيع متغير غير مُعيّن.

ينطوي استخدامه على عدد من المخاطر غير البديهية.

؟
أداة مدمجة خاصةset / errexit set-eنعم Errexit هو إعداد، عند تمكينه، سيؤدي، في ظل ظروف معينة محددة للغاية، إلى خروج الصدفة بدون رسالة خطأ كلما تلقت الصدفة رمز خروج غير صفري.

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

؟
أداة مدمجة خاصةفخ / مخرج trap'[arg]'EXITنعم إذا كان مُحدِّد الإشارة هو 0أو EXIT، [arg]فسيتم تنفيذه عند خروج الصدفة. إذا كان [arg]يحتوي على توسعات، [arg]فيجب أن يكون بين علامتي اقتباس مفردتين. ؟
جدوىprintf printf'<%s>\n'"${var}"نعم وسيلة لطباعة محتويات متغير بشكل موثوق. ؟
متغيرات باشباشبيد "${BASHPID}"لا "يتوسع إلى معرف العملية لعملية bash الحالية." [ 56 ]؟
متغيرات باشBASH_ARGC "${BASH_ARGC[@]}"لا "متغير مصفوفة تكون قيمه هي عدد المعلمات في كل إطار من مكدس استدعاءات تنفيذ bash الحالي." [ 57 ]؟
متغيرات باشBASH_ARGV "${BASH_ARGV[@]}"لا "متغير مصفوفة يحتوي على جميع المعلمات في مكدس استدعاءات تنفيذ bash الحالي." [ 58 ]؟
متغيرات باشBASH_LINENO "${BASH_LINENO[@]}"لا "متغير مصفوفة عناصره هي أرقام الأسطر في ملفات المصدر حيث تم استدعاء كل عنصر مطابق." [ 59 ]"${FUNCNAME[@]}"؟
متغيرات باشBASH_REMATCH "${BASH_REMATCH[@]}"لا "متغير مصفوفة يتم تعيين أعضائه بواسطة =~عامل التشغيل الثنائي للأمر [[الشرطي." [ 60 ]؟
متغيرات باشBASH_SOURCE "${BASH_SOURCE[@]}"لا "متغير مصفوفة تكون أعضاؤه هي أسماء ملفات المصدر حيث يتم تعريف أسماء وظائف الصدفة المقابلة في متغير المصفوفة." [ 61 ]"${FUNCNAME[@]}"؟
متغيرات باشBASH_XTRACEFD "${BASH_XTRACEFD}"لا "إذا تم تعيينه إلى عدد صحيح يتوافق مع واصف ملف صالح، فسيكتب Bash مخرجات التتبع التي تم إنشاؤها عند تمكينه إلى واصف الملف هذا." [ 62 ]set-x؟
متغيرات باشإيبوكريل تايم "${EPOCHREALTIME}"لا "في كل مرة تتم الإشارة إلى هذا المعامل، فإنه يتوسع إلى عدد الثواني منذ بداية حقبة يونكس (انظر ) كقيمة فاصلة عائمة بدقة ميكروثانية." [ 63 ]time(3)؟
متغيرات باشاسم الدالة "${FUNCNAME[@]}"لا "متغير مصفوفة يحتوي على أسماء جميع وظائف الصدفة الموجودة حاليًا في مكدس استدعاءات التنفيذ." [ 64 ]؟
متغيرات باشلايننو "${LINENO}"لا "في كل مرة تتم الإشارة إلى هذا المعامل، يقوم النظام باستبدال رقم عشري يمثل رقم السطر التسلسلي الحالي (بدءًا من 1) داخل نص برمجي أو دالة." [ 65 ]؟
متغيرات باشبيبستاتوس "${PIPESTATUS[@]}"لا "متغير مصفوفة يحتوي على قائمة بقيم حالة الخروج من العمليات في خط أنابيب الواجهة الأمامية الذي تم تنفيذه مؤخرًا (والذي قد يحتوي على أمر واحد فقط)." [ 66 ]؟
متغيرات باشمرض الغدة النخامية "${PPID}"لا "معرف العملية للأصل الخاص بالصدفة." [ 67 ]؟
متغيرات باشبلاي ستيشن 4 "${PS4}"لا "يتم توسيع قيمة هذا المعامل كما هو الحال مع PS1 ويتم طباعة القيمة قبل كل أمر يعرضه bash أثناء تتبع التنفيذ." [ 68 ]؟
شل المدمجةمجموعة / مقيد set-rلا يهدف الوضع المقيد إلى تحسين أمان مثيل shell الفردي من شخص خبيث لديه وصول مادي إلى الجهاز.

مع تغير نماذج التهديد، أصبح استخدامه أقل شيوعاً الآن مما كان عليه في السابق.

؟
شل المدمجةshopt / extdebug shopt-sextdebugلا "سلوك مخصص للاستخدام من قبل أدوات تصحيح الأخطاء." ؟
شل المدمجةمصيدة / تصحيح الأخطاء trap'[arg]'DEBUGلا "إذا كانت sigspec هي DEBUG، فسيتم تنفيذ وسيط الأمر قبل" أنواع معينة من الأوامر. ؟
شل المدمجةخطأ / خطأ trap'[arg]'ERRلا "إذا كانت sigspec هي ERR، فسيتم تنفيذ وسيط الأمر كلما ..." أنواع معينة من الأوامر "تعيد حالة خروج غير صفرية"، تخضع لقيود مماثلة لتلك الخاصة بـ ErrExit. ؟
شل المدمجةمصيدة / عودة trap'[arg]'RETURNلا "إذا كانت قيمة sigspec هي RETURN، فسيتم تنفيذ وسيط الأمر في كل مرة تنتهي فيها وظيفة shell أو نص برمجي يتم تنفيذه باستخدام .أو source builtins من التنفيذ." ؟

  • ميزات الصدفة المحددة بواسطة POSIX :
    • توسيع معلمات الصدفة [ ar ]
    • المعلمات الخاصة: [ كـ ]
    • مجموعة أدوات مدمجة خاصة : [ o ]
    • مصيدة المرافق المدمجة الخاصة : [ في ]
      • يحدد معيار POSIX استخدامات معينة للدالة المدمجة trap : ...
    • دالة printf المساعدة : وسيلة لطباعة محتويات متغير بشكل موثوق:
  • ميزات Bash غير المحددة في POSIX:
    • متغيرات باش: [ au ]
    • مجموعة الأوامر المدمجة في الصدفة : [ o ]
    • متجر شل المدمج : [ av ]
    • مصيدة مدمجة في الصدفة : [ aw ]
      • على الرغم من أن معيار POSIX يحدد استخدامات معينة للدالة المدمجة trap ، فإن مواصفات الإشارة التالية هي امتدادات لـ Bash: ...
  • أدوات تصحيح الأخطاء التابعة لجهات خارجية:

[ 19 ]

    • devscripts-checkbashisms: التحقق مما إذا كان نص برمجي /bin/sh يحتوي على أي بنيات شائعة خاصة بـ bash؛ [ 71 ] [ 18 ]
    • kcov: أداة لتغطية التعليمات البرمجية بدون خيارات تجميع خاصة؛ [ 72 ]
    • Bashdb: مصحح الأخطاء الرمزي في Bash. [ 22 ] [ 73 ]

أمثلة

مع توسيع المعلمات، يمكن لمتغير غير مُعيّن أو فارغ أن يُوقف البرنامج النصي."${var:?}"

$ cat ex.sh # ! /bin/env bash bar="foo is not defined" echo "${foo:?$bar}" echo this message does not print $ chmod 0700 ./ex.sh $ ./ex.sh ./ex.sh: line 3: foo: foo is not defined

طباعة محتويات مصفوفة تحتوي على مسافات وأسطر جديدة بشكل موثوق، أولاً باستخدام صيغة قابلة للنقل، ثم طباعة نفس الشيء في Bash. لاحظ أن POSIX لا يدعم المصفوفات المسماة، بل يدعم فقط قائمة الوسائط، والتي يمكن إعادة تعيينها باستخدام الدالة المدمجة set ."$@"

$ bash -o posix $ set -- "a" " b" " > c " $ printf ',%s,\n' " $@ " | sed 's/.*/|&|/' ' |,a,| |, b,| |, | | c ,|

لاحظ أنه في Bash، يتم توضيح عدد المسافات قبل السطر الجديد.

$ array =( "a" " b" " > c " ) $ declare -p array declare -a array=([0]="a" [1]=" b" [2]=$' \nc ')

طباعة رسالة خطأ عند وجود مشكلة.

$ cat error.sh # ! /bin/env bash if ! ls -l /dev | grep sdz then  echo Error, line "${LINENO}" fi $ chmod 0700 ./error.sh $ ./error.sh Error, line 4

باستخدام xtrace . لو تم تفعيل errexit، لما تم تنفيذ ذلك.echoquux

$ cat ./test.sh # ! /bin/env bash echo foo false echo quux $ chmod 0700 ./test.sh $ bash -o xtrace -o errexit ./test.sh + echo foo foo + false $ bash -o xtrace ./test.sh + echo foo foo + false + echo quux quux

ملاحظة: $BASHPIDيختلف هذا عن $$الوضع في ظروف معينة، مثل الأصداف الفرعية التي لا تتطلب إعادة تهيئة bash.

$ echo $( echo $ BASHPID $$ ) $$ $BASHPID  25680 16920 16920 16920 # | | | | # | | | \- - $BASHPID خارج الصدفة الفرعية # | | \ - - $$ خارج الصدفة الفرعية # | \- - $$ داخل الصدفة الفرعية # \  - - $ BASHPID داخل الصدفة الفرعية

الإبلاغ عن الأخطاء

يُبلغ أمر خارجي يُسمى bashbug عن أخطاء Bash shell. عند استدعاء هذا الأمر، يفتح محرر النصوص الافتراضي للمستخدم مع نموذج لملئه. يُرسل النموذج بالبريد الإلكتروني إلى القائمين على صيانة Bash (أو اختياريًا إلى عناوين بريد إلكتروني أخرى). [ 74 ]

تاريخ

نشأت وظائف سكربتات الصدفة من ملفات تُسمى " runcoms "، نسبةً إلى معالج الماكرو الذي يحمل الاسم نفسه والذي طُرح عام 1963. اللاحقة "rc" هي اختصار لـ "runcom". [ 75 ] صاغ لويس بوزان مصطلح "الصدفة" عام 1964 أو 1965، وظهر في بحثه المنشور عام 1965 بعنوان "الصدفة: أداة عالمية لاستدعاء الإجراءات وتسلسلها في النظام"، والذي يصف العديد من الميزات التي وُجدت لاحقًا في العديد من صدفات يونكس. [ 76 ] حُدد معيار ASCII لترميز الأحرف عام 1969 في وثيقة تُسمى طلب التعليقات (RFC) 20. [ 77 ]

الجدول الزمني

الأحداث الهامة في تاريخ Bash مدرجة أدناه: [ 78 ]

انظر أيضاً

أنظمة يونكس

واجهة رسومية للبرامج النصية

توجد العديد من البرامج التي تسمح لك بإنشاء واجهة رسومية لبرامج shell النصية.

  • curses - curses هي مكتبة تحكم طرفية لأنظمة شبيهة بنظام Unix، مما يتيح إنشاء تطبيقات واجهة المستخدم النصية (TUI).
  • dialog - هي أداة مساعدة تسمح لك بإنشاء مربعات حوار في وحدة التحكم، باستخدام مكتبات curses و ncurses .
  • gtkdialog - هي الأداة الأكثر فعالية لإنشاء تطبيقات رسومية باستخدام نصوص باش البرمجية. [ 117 ]
  • kdialog - هو ما يعادل KDE من zenity. [ 118 ]
  • xdialog - هو بديل لـ dialog مصمم لإعطاء البرامج التي يتم تشغيلها من الطرفية واجهة نظام X Window .
  • ياد - هو نسخة معدلة من زينيتي، مع المزيد من الميزات. [ 120 ]

للمزيد من القراءة

  • "المواصفات الأساسية، الإصدار 8" (أي POSIX-2024). IEEE ومجموعة Open Group [ 8 ]
  • "تطور الصدف في لينكس: من بورن إلى باش وما بعدهما". آي بي إم [ 123 ]
  • "ويكي غريغ". mywiki.wooledge.org
  • "موسوعة هاكرز باش". bash-hackers.org [ 28 ]

ملحوظات

  1. "Bash 4.0 يخضع لترخيص GLPv3" [ 2 ]
  2. "الفصل 2.10.1 قواعد اللغة الصدفية - الاصطلاحات المعجمية" [ 8 ]
  3. «نظام يونكس حساس لحالة الأحرف. ولأن نظام يونكس حساس لحالة الأحرف، فإن نصوصنا البرمجية (shell scripts) حساسة لحالة الأحرف أيضًا.» [ 9 ] : 3
  4. "الفصل 8: تحرير سطر الأوامر" [ 11 ]
  5. "الفصل 8.5 وضع القراءة في سطر الأوامر" [ 11 ]
  6. "الملحق د.2 فهرس الكلمات المحجوزة في Shell" [ 11 ]
  7. "عندما يحدث التوسيع داخل علامات اقتباس مزدوجة، ويتم تقسيم الكلمات، يتوسع كل مُعامل إلى كلمة منفصلة. أي أن "$@" يُعادل "$1" "$2" …." "الفصل 3.4.2 المعاملات الخاصة" [ 11 ]
  8. 1 2 "الفصل 6.7 المصفوفات" [ 11 ]
  9. "الفصل 2: ​​التعريفات" [ 11 ]
  10. لا ينبغي الخلط بينه وبين متغير الصدفة"$$".
  11. "الفصل 4.1: خزائن بورن شيل المدمجة" [ 11 ]
  12. "الفصل 6.2 ملفات بدء تشغيل Bash" [ 11 ]
  13. "الفصل 36.9. قضايا قابلية النقل" [ 16 ]
  14. "الملحق ب.1 اختلافات التنفيذ عن SVR4.2 Shell" [ 11 ]
  15. 1 2 3 4 5 "الفصل 4.3.1 المجموعة المدمجة" [ 11 ]
  16. "في هذا الوضع،$BASH_ENVالملفات$ENV، ولا يتم توريث وظائف الصدفة من البيئة، ويتم تجاهل متغيرات SHELLOPTS وBASHOPTS وCDPATH وGLOBIGNORE، إذا ظهرت في البيئة." [ o ]
  17. "الفصل 6.12 وضع توافق الصدفة" [ 11 ]
  18. انظر. [ o ]set-v
  19. "الفصل 2.15 وحدات مدمجة خاصة" [ 8 ]
  20. "الفصل 7.1 أساسيات التحكم في الوظائف" [ 11 ]
  21. "توقف، عادةً Ctrl + z." [ 9 ] : 25
  22. في Korn shell، يتعرف الأمر echo على خيارات الأوامر هذه افتراضيًا. أما في Bash shell، فيجب إضافة الخيار -e إلىالأمر echo لإضافة سطر جديد. [ 9 ] : 20echo-e"\n"
  23. "الفصل 3.7.3 بيئة تنفيذ الأوامر" [ 11 ]
  24. "الفصل 6.6 الأسماء المستعارة" [ 11 ]
  25. "الفصل 3.3 وظائف الصدفة" [ 11 ]
  26. "الفصل 4.1: خزائن بورن شيل المدمجة" [ 11 ]
  27. لا تتطلب البرامج النصية Shell عملية تجميع قبل التنفيذ، وعند استيفاء متطلبات معينة، يمكن استدعاؤها كأوامر باستخدام اسم ملفها.
  28. مفهوم مستوحى من ALGOL 68. [ 31 ]
  29. "الفصل 3.2.5.2 البنى الشرطية" [ 11 ]
  30. "الفصل 3.2.6 العمليات المشتركة" [ 11 ]
  31. "الفصل 5.3.1 توسيع الدعامة" [ 11 ]
  32. 1 2 على الرغم من إمكانية استخدامهما معًا، فإن استخدام الأقواس في مطابقة الأنماط،واستخدام الأقواس في أوامر الاختبار،و، كل منهما شيء مختلف. [...][[[ ... ]]
  33. "الفصل 3.1.2.5 الترجمة الخاصة بالمنطقة" [ 11 ]
  34. للاطلاع على هذه الوظيفة، راجع الإصدارات الحالية منbcوawk، من بين أمور أخرى.
  35. "الفصل 9: استخدام التاريخ بشكل تفاعلي" [ 11 ]
  36. "الفصل 8.6 الإكمال القابل للبرمجة" [ 11 ]
  37. "الفصل 1.1 ما هو باش؟" [ 11 ]
  38. "الفصل 3.5.4 استبدال الأمر" [ 11 ]
  39. "يحدث الشكل القياسي لاستبدال الأوامر عندما يتم تضمين أمر ما على النحو التالي:أو (مهجور)." [ al ]$(command)`command`
  40. "الفصل 4.1: وحدات بورن شيل المدمجة" :test [ 11 ]
  41. "قد يؤدي تحليل أسبقية المعاملات التاريخي مع 4 وسائط أو أكثر إلى غموض عند مصادفة سلاسل نصية تبدو كقيم أساسية.وقدألغىمعيار POSIX استخدام القيم الأساسية-aو ...-o-a-o&&\|\|
  42. «يعود تاريخه إلى نظام POSIX حوالي عام 1990 (1003.2d9، والتي فقدت نسختي الورقية منها). قمت بتطبيقه بعد أن أضافه فريق بيركلي، وخاصة مارك تيتلبوم، إلى نظام POSIX. انتهى الأمر بإسقاطه لصالحتوسيع ksh، وعندها توقف الجميع عن استخدام النظام القديم.» [ 53 ]$((...))$[...]
  43. لاحظ أن السبب في استخدامبدلاً منهو أنكان عاملًا وسيطًا في بيئة Thompson/Bourne. ... (للتوضيح،(الذي كان يبدو أشبه بـفي ذلك الوقت) كان عاملًا وسيطًا في بيئة Thompson ....من المحتمل أن يكون قد تم تقديمه بواسطة بيئة Bourne (التي استخدمتكعامل وسيط ولكنها احتفظتأيضًا بـ للتوافق مع الإصدارات السابقة)" [ 54 ][!x][^x]^^[!...]\|^
  44. "الفصل 3.5.3 توسيع معلمات الصدفة" [ 11 ]
  45. "الفصل 3.4.2 المعلمات الخاصة" [ 11 ]
  46. "الفصل 4.1 بورن شيل المدمج: المصيدة" [ 11 ]
  47. "الفصل 5.2 متغيرات باش" [ 11 ]
  48. "الفصل 4.3.2 المتجر المدمج" [ 11 ]
  49. "الفصل 4.1 بورن شيل المدمج: المصيدة" [ 11 ]
  50. "استخدام shell مشتق من sh مثل bash (الافتراضي للمستخدمين الجدد في Panther)...." [ 95 ]
  51. "كانت إصدارات تلك البيئة قبل الإصدار 10.3.X تستخدم tcsh، أو T shell، كإعداد افتراضي." [ 96 ]

مراجع

  1. تشيت رامي (5 يوليو 2025). "إصدار Bash-5.3 متاح" . تم الاطلاع عليه في 5 يوليو 2025 .
  2. 1 2 هوبر، ماتياس (24 فبراير 2009). "باش 4.0 يُقدّم المصفوفات الترابطية" . مجلة لينكس . الولايات المتحدة الأمريكية: لينكس نيو ميديا، ذ.م.م. OCLC 1305033669. تاريخ الاسترجاع: 6 يوليو 2026 . 
  3. "test.c" . github.com . bash 1.11. مؤرشف من الأصل في 15 أكتوبر 2021. تم الاطلاع عليه في 2 يوليو 2026 .
  4. "جاري النسخ" . github.com . مؤرشف من الأصل في 6 مايو 2021. تم الاطلاع عليه في 2 يوليو 2026 .
  5. 1 2 رامي، تشيت (30 مايو 2008). "دليل لغات البرمجة من الألف إلى الياء: باش/بورن-أغين شل" (مقابلة). أجرت المقابلة هاميلتون، نعومي. كمبيوتر وورلد أستراليا . تاريخ الاسترجاع: 4 يوليو 2026 .
  6. 1 2 رامي، تشيت (14 ديسمبر 2015). "تشيت رامي: خبير الأسبوع" . حديث بسيط (مقابلة). أجرى المقابلة موريس، ريتشارد. كامبريدج، المملكة المتحدة: شركة ريد جيت سوفتوير المحدودة . تم الاطلاع عليه في 4 يوليو 2026 .
  7. 1 2 "GNU Bash" . gnu.org . مؤسسة البرمجيات الحرة، 22 سبتمبر 2020. تم الاطلاع عليه في 4 يوليو 2026 .
  8. 1 2 3 4 معهد مهندسي الكهرباء والإلكترونيات (IEEEمجموعة Open Group (14 يونيو 2024). "المواصفات الأساسية، الإصدار 8" . "POSIX-2024" (المعيار). 1003.1™ ( إصدار 2024). معهد مهندسي الكهرباء والإلكترونيات (IEEE) ومجموعة Open Group. ص 4107. ISBN   9781957866406تم الاطلاع عليه بتاريخ 4 يوليو 2026 .
  9. 1 2 3 مايكل، راندال ك. (2008). إتقان برمجة سكريبتات شل في نظام يونكس: برمجة سكريبتات شل باستخدام باش، وبورن، وكورن للمبرمجين، ومديري الأنظمة، وخبراء يونكس ( الطبعة الثانية). إنديانابوليس، إنديانا: دار نشر وايلي. ISBN  978-0-470-18301-4تم الاطلاع عليه بتاريخ 4 يوليو 2026 .
  10. ريبي، سكوت (5 أكتوبر 2012). "البدء باستخدام BASH: دليل تعليمي لـ Bash" . hypexr.org . تم الاطلاع عليه في 4 يوليو 2026 .
  11. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 رامي، تشيت؛ فوكس، برايان (18 مايو 2025). دليل مرجع جنو باش (الإصدار 5.3 ). مؤسسة البرمجيات الحرة. تم الاطلاع عليه في 4 يوليو 2026 . 
  12. 1 2 غاريلز، ماختلت (6 يونيو 2008). "الفصل 3.2.1. المسار" . مقدمة إلى لينكس: دليل عملي (الطبعة 1.27 ). مشروع توثيق لينكس . ISBN  1596821124تم الاطلاع عليه بتاريخ 4 يوليو 2026 .
  13. كيرنيغان، برايان دبليوبايك، روب (1984). بيئة برمجة يونكس . إنجلوود كليفس، نيو جيرسي: برنتيس هول، إنك. ISBN 0-13-937699-2.
  14. "هياكل البيانات المعيارية في لغة C" . dartmouth.edu . كلية دارتموث . مؤرشف من الأصل في 31 أغسطس 2024. تم الاطلاع عليه في 4 يوليو 2026 .
  15. 1 2 ستيفنز، آل (1 يوليو 2001). "أوشكت على الحصول على محرر ومترجم لينكس" . مجلة دكتور دوبز: عالم تطوير البرمجيات . المجلد 26، العدد 7. مانهاسيت: سي إم بي ميديا ​​ذ.م.م. الصفحات 113-116 . OCLC 746941758. تم الاطلاع عليه في 2 يوليو 2026. ولكن جميع نصوص التهيئة والتثبيت المرفقة ببرامج المصادر المفتوحة تقريبًا مكتوبة بلغة باش، وإذا أردت فهم هذه النصوص، فعليك معرفة لغة باش .    
  16. 1 2 كوبر، مندل (10 مارس 2014). دليل متقدم لكتابة نصوص باش: استكشاف معمق لفن كتابة نصوص شل ( الطبعة العاشرة). مشروع توثيق لينكس . تم الاطلاع عليه في 4 يوليو 2026 . 
  17. رامي، تشيت. "6.11 باش و POSIX" . جامعة كيس ويسترن ريزيرف . تم الاطلاع عليه بتاريخ 8 أغسطس 2025 .
  18. 1 2دليل أوامر لينكس العامة من ManKier.comcheckbashisms(1)  
  19. 1 2دليل أوامر لينكس العامة من ManKier.comshellcheck(1)  
  20. "الفصل 10 - الملفات". دليل سياسات دبيان الإصدار 4.5.0.2 . مشروع دبيان . تم الاطلاع عليه بتاريخ 4 يوليو 2026 .
  21. ماكنزي، ديفيد؛ إليستون، بن؛ ديماي، أكيم (17 مارس 2026). "الفصل 11: برمجة الصدفة المحمولة" . Autoconf: إنشاء نصوص التكوين التلقائي . مؤسسة البرمجيات الحرة. تم الاطلاع عليه في 4 يوليو 2026. لإصدار GNU Autoconf 2.73 .
  22. 1 2 "مصحح أخطاء باش" . سورس فورج . تم الاطلاع عليه بتاريخ 18 أغسطس 2025 .
  23. نيوهام، كاميرون (29 مارس 2005). تعلم باش شيل: برمجة يونكس شيل . أورايلي ميديا، ص 205. ISBN  978-0-596-55500-9تم الاطلاع عليه بتاريخ 16 أغسطس 2025 .
  24. "dd(1)" . www.man7.org . تم الاطلاع عليه بتاريخ 19 أكتوبر 2025 .
  25. 1 2 3 "bash(1)" . case.edu . جامعة كيس ويسترن ريزيرف . تم الاطلاع عليه في 5 يوليو 2026 .
  26. "إرسال الإشارات واستقبالها" . wooledge.org . تم الاطلاع عليه بتاريخ 5 أغسطس 2025 .
  27. "أرشيفات bug-bash، ردًا على: توثيق أن استخدام set -v داخل عبارات case له وضع خاص" . bug-bash (قائمة بريدية). مشروع جنو . 20 أبريل 2021. تم الاطلاع عليه في 8 أغسطس 2025 .
  28. 1 2 شامبيرا، يان، محرر. (13 فبراير 2022). "موسوعة هاكرز باش" . bash-hackers.org . ميترتايش، ألمانيا. مؤرشف من الأصل في 7 أبريل 2022. تم الاطلاع عليه في 5 يوليو 2026 .
  29. "مسرد مصطلحات البرمجة للمبتدئين: التكرار" . syracuse.edu . جامعة سيراكيوز . 13 يناير 2020. تم الاطلاع عليه في 15 أغسطس 2025 .
  30. "مركب - اسم (1)" . merriam-webster.com . قاموس ميريام-ويبستر الجامعي . تم الاطلاع عليه بتاريخ 15 أغسطس 2025 .
  31. ستيفن ر. بورن (12 يونيو 2015). "الأيام الأولى لنظام يونكس وتصميم sh" (ملف PDF) . bsdcan.org . مؤتمر BSDcan 2015: المؤتمر التقني لأنظمة BSD . تاريخ الاطلاع: 8 أغسطس 2015 .
  32. "دليل برمجة باش المتقدم: 37.2: باش، الإصدار 3" . مشروع توثيق لينكس . تم الاطلاع عليه في 6 يوليو 2026 .
  33. ماليت، أندرو (24 ديسمبر 2015). إتقان برمجة سكريبتات لينكس شل . دار نشر باكت المحدودة. ص 56. ISBN  978-1-78439-759-3تم الاطلاع عليه بتاريخ 16 أغسطس 2025. إن تعلم هذا الآن قد يوفر علينا الكثير من الألم والمعاناة لاحقاً، خاصةً...
  34. "محلل باش" . wooledge.org . تم الاطلاع عليه بتاريخ 15 أغسطس 2025 .
  35. رامي، تشيت. "هندسة تطبيقات المصادر المفتوحة (المجلد 1): غلاف بورن-أغين" . aosabook.org . تم الاطلاع عليه بتاريخ 15 أغسطس 2025 .
  36. "دليل مرجع باش: 8.6 الإكمال القابل للبرمجة" . case.edu . جامعة كيس ويسترن ريزيرف . تم الاطلاع عليه بتاريخ 8 أغسطس 2025 .
  37. 1 2 "دليل برمجة باش المتقدم: الملحق ي: مقدمة إلى الإكمال القابل للبرمجة" . مشروع توثيق لينكس . تم الاطلاع عليه بتاريخ 21 يناير 2022 .
  38. 1 2 "باش" . مؤسسة البرمجيات الحرة، مشروع جنو . تم الاسترجاع في 8 أغسطس 2025 .
  39. "دليل مرجعي لـ Bash" . case.edu . جامعة كيس ويسترن ريزيرف . تم الاطلاع عليه بتاريخ 8 أغسطس 2025 .
  40. "دليل GNU Coreutils الإصدار 9.7، 15.2 printf: تنسيق البيانات وطباعتها" . مؤسسة البرمجيات الحرة، مشروع GNU . تم الاطلاع عليه بتاريخ 11 أغسطس 2025 .
  41. 1 2 "غلاف GNU Bourne-Again، الصفحة الرئيسية" . case.edu . جامعة كيس ويسترن ريزيرف . تم الاطلاع عليه بتاريخ 8 أغسطس 2025 .
  42. "الأسئلة الشائعة" . case.edu . جامعة كيس ويسترن ريزيرف . تم الاطلاع عليه بتاريخ 8 أغسطس 2025 .
  43. "CVE-2024-2448: ثغرة حقن أوامر مصادق عليها قيد التنفيذ في Kemp LoadMaster" . rhinosecuritylabs.com . مختبرات راينو للأمن، 23 أبريل 2024. تم الاطلاع عليه في 6 يوليو 2026 .
  44. "ثغرات أمنية خاصة بـ CGI-BIN" . ucdavis.edu . جامعة كاليفورنيا، ديفيس . يناير 1999. تم الاطلاع عليه في 6 يوليو 2026 .
  45. "أمن CGI" . BITS: أخبار الحوسبة والاتصالات . مختبر لوس ألاموس الوطني. مارس 1996. مؤرشف من الأصل في 16 أبريل 2000. تم الاطلاع عليه في 6 يوليو 2026 .
  46. "تقييم قضايا القيادة والأمن" . wooledge.org . تم الاطلاع عليه بتاريخ 6 يوليو 2026 .
  47. "ورقة غش للتحقق من صحة المدخلات" . owasp.org . OWASP . تم الاطلاع عليه بتاريخ 17 أغسطس 2025 .
  48. ليدن، جون (24 سبتمبر 2014). "تحديث عاجل: ثغرة 'شل شوك' تُعرّض أنظمة ماك أو إس إكس ولينكس لثغرات أمنية واسعة النطاق" . theregister.co.uk . ذا ريجستر . تاريخ الاطلاع: 6 يوليو 2016 .
  49. بيرلروث، نيكول (25 سبتمبر 2014). "خبراء الأمن يتوقعون أن تكون ثغرة "شل شوك" البرمجية في باش ذات أهمية بالغة" . صحيفة نيويورك تايمز . تم الاطلاع عليه بتاريخ 6 يوليو 2016 .
  50. سيلتزر، لاري (29 سبتمبر 2014). "لعبة شيلشوك تجعل لعبة هارت بليد تبدو ضئيلة الأهمية" . zdnet.com . ZDNet . تم الاطلاع عليه في 6 يوليو 2026 .
  51. سيدبوروالا، حذيفة (24 سبتمبر 2014). "هجوم حقن التعليمات البرمجية باستخدام متغيرات بيئة مصممة خصيصًا في Bash" . redhat.com . ريد هات . تم الاطلاع عليه في 6 يوليو 2016 .
  52. شازيلاس، ستيفان (4 أكتوبر 2014). "ردًا على: التسلسل الزمني لثغرة شيلشوك (كان: CVE-2014-6271: تنفيذ التعليمات البرمجية عن بُعد عبر باش)" . أرشيفات القائمة البريدية oss-sec (قائمة بريدية). شركة Nmap Software LLC . تم الاطلاع عليه في 6 يوليو 2016 .
  53. رامي، تشيت (7 أبريل 2012). "رد: حالة $ [ arith ] لـ eval arith vsl $((arith))??" . bug-bash (قائمة بريدية). مشروع جنو . تم الاسترجاع في 6 يوليو 2026 .
  54. شازيلاس، ستيفان (24 يناير 2022). "Shell - التكرار السلبي للملفات" . موقع Unix & Linux Stack Exchange . شركة Stack Exchange . تم الاطلاع عليه في 6 يوليو 2026 .
  55. ^ جاريلز ، ماشتلت (27 ديسمبر 2008). "الفصل 2.3. تصحيح البرامج النصية لـ Bash" . دليل باش للمبتدئين (1.11 ed.). مشروع توثيق لينكس . رقم ISBN  0-9744339-4-2تم الاطلاع عليه بتاريخ 6 يوليو 2026 .
  56. "دليل مرجعي لـ Bash: 5.2: متغيرات Bash" . مؤسسة البرمجيات الحرة، مشروع جنو . BASHPID . تم الاطلاع عليه بتاريخ 8 أغسطس 2025 .
  57. "دليل مرجع باش: 5.2: متغيرات باش" . مؤسسة البرمجيات الحرة، مشروع جنو . BASH_ARGC . تم الاطلاع عليه بتاريخ 8 أغسطس 2025 .
  58. "دليل مرجع باش: 5.2: متغيرات باش" . مؤسسة البرمجيات الحرة، مشروع جنو . BASH_ARGV . تم الاطلاع عليه بتاريخ 8 أغسطس 2025 .
  59. "دليل مرجع باش: 5.2: متغيرات باش" . مؤسسة البرمجيات الحرة، مشروع جنو . BASH_LINENO . تم الاطلاع عليه بتاريخ 8 أغسطس 2025 .
  60. "دليل مرجع باش: 5.2: متغيرات باش" . مؤسسة البرمجيات الحرة، مشروع جنو . BASH_REMATCH . تم الاطلاع عليه بتاريخ 8 أغسطس 2025 .
  61. "دليل مرجع باش: 5.2: متغيرات باش" . مؤسسة البرمجيات الحرة، مشروع جنو . BASH_SOURCE . تم الاطلاع عليه بتاريخ 8 أغسطس 2025 .
  62. "دليل مرجع باش: 5.2: متغيرات باش" . مؤسسة البرمجيات الحرة، مشروع جنو . BASH_XTRACEFD . تم الاطلاع عليه بتاريخ 8 أغسطس 2025 .
  63. "دليل مرجعي لـ Bash: 5.2: متغيرات Bash" . مؤسسة البرمجيات الحرة، مشروع GNU . EPOCHREALTIME . تم الاطلاع عليه بتاريخ 8 أغسطس 2025 .
  64. "دليل مرجع باش: 5.2: متغيرات باش" . مؤسسة البرمجيات الحرة، مشروع جنو . اسم الدالة . تم الاطلاع عليه بتاريخ 8 أغسطس 2025 .
  65. "دليل مرجعي لـ Bash: 5.2: متغيرات Bash" . مؤسسة البرمجيات الحرة، مشروع جنو . LINENO . تم الاطلاع عليه بتاريخ 8 أغسطس 2025 .
  66. "دليل مرجعي لـ Bash: 5.2: متغيرات Bash" . مؤسسة البرمجيات الحرة، مشروع جنو . PIPESTATUS . تم الاطلاع عليه بتاريخ 8 أغسطس 2025 .
  67. "دليل مرجعي لـ Bash: 5.2: متغيرات Bash" . مؤسسة البرمجيات الحرة، مشروع جنو . PPID . تم الاطلاع عليه بتاريخ 8 أغسطس 2025 .
  68. "دليل مرجعي لـ Bash: 5.2: متغيرات Bash" . مؤسسة البرمجيات الحرة، مشروع جنو . PS4 . تم الاطلاع عليه بتاريخ 8 أغسطس 2025 .
  69. "ShellCheck: أداة تحليل نصوص Shell" . shellcheck.net .
  70. جيت هاب: shellcheck
  71. "Debian -- تفاصيل حزمة devscripts في sid" . debian.org .
  72. "Kcov - تغطية الكود" . github.io .
  73. " [ Bashdb-devel ] ردًا على: [ PATCH ] إصلاح معالجة سكربت bashdb لمجلد tmp" . bug-bash (قائمة بريدية). مشروع جنو . تم الاطلاع عليه في 8 أغسطس 2025 .
  74. "bashbug(1)" . die.net . 21 أكتوبر 2017. تم الاطلاع عليه في 6 يوليو 2026 .
  75. «في نظام يونكس، ما الذي ترمز إليه بعض الأوامر ذات الأسماء الغامضة؟» . iu.edu . جامعة إنديانا. 5 فبراير 2009. مؤرشف من الأصل في 10 يونيو 2010. تم الاطلاع عليه في 6 يوليو 2026 .
  76. لويس بوزان (25 نوفمبر 2000). "أصل الصدفة" . multicians.org .
  77. سيرف، فينت (16 أكتوبر 1969). "تنسيق ASCII لتبادل البيانات عبر الشبكة" . ietf.org . جامعة كاليفورنيا، لوس أنجلوس، مجموعة عمل الشبكة . تم الاطلاع عليه بتاريخ 29 يونيو 2026 .
  78. "هل توجد قائمة بالميزات التي أُضيفت إلى إصدارات محددة من Bash؟" . wooledge.org . تم الاطلاع عليه بتاريخ 6 يوليو 2026 .
  79. ستالمان، ريتشارد؛ رامي، تشيت (10 فبراير 1988). "جنو + بي إس دي = ؟" . google.com . مجموعة الأخبار : comp.unix.questions . يوزنت: 2362@mandrill.CWRU.Edu . تم الاطلاع عليه في 29 يونيو 2026 .   
  80. ستالمان، ريتشارد (3 أكتوبر 2010). "حول مشروع جنو" . مؤسسة البرمجيات الحرة، مشروع جنو . تم الاطلاع عليه في 6 يوليو 2026 .
  81. فوكس، برايان؛ تاور الابن، ليونارد هـ. (8 يونيو 1989). "باش في مرحلة تجريبية!" . google.com . مجموعة الأخبار : gnu.announce . تم الاسترجاع في 6 يوليو 2026 . 
  82. "تطور الصدف في لينكس" . ibm.com . شركة IBM. 9 ديسمبر 2011.
  83. تورفالدز، لينوس (26 أغسطس 1991). "ما الذي ترغب برؤيته أكثر في مينيكس؟" . google.com . مجموعة الأخبار : comp.os.minix . تاريخ الاسترجاع: 8 أغسطس 2025 . 
  84. "نشرة جنو، يناير 1993" . google.com . مجموعة الأخبار : gnu.announce . 20 أبريل 1993. يوزنت: gnusenet930421bulletin@prep.ai.mit.edu . تاريخ الاسترجاع: 6 يوليو 2026 .  
  85. رامي، تشيت (1 أغسطس 1994). "باش - واجهة سطر أوامر جنو (تأملات ودروس مستفادة)" . linuxjournal.com . مجلة لينكس . تم الاطلاع عليه في 6 يوليو 2026 .
  86. رامي، تشيت (31 أكتوبر 2010)، "تواريخ في مقابلتك مع مجلة Computerworld" ، scribd.com ، تم الاطلاع عليه في 6 يوليو 2026
  87. رامي، تشيت (12 يونيو 1989). "إصلاحات وتحسينات Bash 0.99" . google.com . مجموعة الأخبار : gnu.bash.bug . تم الاطلاع عليه في 6 يوليو 2026 . 
  88. رامي، تشيت (24 يوليو 1989). "بعض إصلاحات bash-1.02" . google.com . مجموعة الأخبار : gnu.bash.bug . تم الاطلاع عليه في 6 يوليو 2026 . 
  89. فوكس، برايان (2 مارس 1990). "توفر باش 1.05" . google.com . مجموعة الأخبار : gnu.bash.bug . تم الاطلاع عليه في 6 يوليو 2026 . 
  90. بريسناهان، كريستين؛ بلوم، ريتشارد (أبريل 2015). دليل دراسة معهد CompTIA Linux+ المدعوم من Linux للمحترفين: امتحان LX0-103 وامتحان LX0-104 ( الطبعة الثالثة). جون وايلي وأولاده، ص 5. ISBN   978-1-119-02122-3تم الاطلاع عليه بتاريخ 6 يوليو 2026. في نظام لينكس ، يستخدم معظم المستخدمين باش لأنه الأكثر شيوعًا.
  91. دانيش، أرمان؛ جانغ، مايكل (فبراير 2006). إتقان لينكس . جون وايلي وأولاده، ص 363. ISBN  978-0-7821-5277-7تم الاطلاع عليه بتاريخ 6 يوليو 2026 .
  92. 1 2 "Debian Wiki: Shell" . debian.org .
  93. رامي، تشيت (14 سبتمبر 2000). "ردًا على: فقدان وضع تحرير الأسطر إذا كان الأمر "set -o vi" موجودًا في أي ملفات يتم استدعاؤها عند تسجيل الدخول" . bug-bash (قائمة بريدية). مشروع جنو . تم الاسترجاع في 8 أغسطس 2025 .
  94. رامي، تشيت (9 أبريل 2001). "Bash-2.05 متاح لبروتوكول نقل الملفات (FTP)" . bug-bash (قائمة بريدية). مشروع جنو . تم الاسترجاع في 8 أغسطس 2025 .
  95. بارتوش، مايكل ؛ فاس، رايان (9 فبراير 2009). إدارة خادم Mac OS X Panther الأساسية: دمج خادم Mac OS X في الشبكات غير المتجانسة ( الطبعة الأولى). سيباستوبول، كاليفورنيا: أورايلي ميديا. ص 189. ISBN   9780596550608تم الاطلاع عليه بتاريخ 6 يوليو 2026 .
  96. فوستر-جونسون، إريك؛ ويلش، جون سي؛ أندرسون، ميكا (1 أبريل 2005). مقدمة في برمجة سكريبتات شل . إنديانابوليس، إنديانا: وايلي للنشر، ص 6. ISBN  978-0-7645-8320-9تم الاطلاع عليه بتاريخ 6 يوليو 2026 .
  97. "Bash-3.0 متاح لبروتوكول نقل الملفات (FTP)" . bug-bash (قائمة بريدية). مشروع جنو . تم الاطلاع عليه بتاريخ 8 أغسطس 2025 .
  98. "تم إصدار Bash-3.1" . bug-bash (قائمة بريدية). مشروع جنو . تم الاطلاع عليه بتاريخ 8 أغسطس 2025 .
  99. "Bash-3.2 متوفر لبروتوكول نقل الملفات (FTP)" . bug-bash (قائمة بريدية). مشروع جنو . تم الاطلاع عليه بتاريخ 8 أغسطس 2025 .
  100. "Bash-4.0 متاح لبروتوكول نقل الملفات (FTP)" . bug-bash (قائمة بريدية). مشروع جنو . تم الاطلاع عليه بتاريخ 8 أغسطس 2025 .
  101. "Bash-4.1 متاح لبروتوكول نقل الملفات (FTP)" . bug-bash (قائمة بريدية). مشروع جنو . تم الاطلاع عليه بتاريخ 8 أغسطس 2025 .
  102. "Bash-4.2 متاح لبروتوكول نقل الملفات (FTP)" . bug-bash (قائمة بريدية). مشروع جنو . تم الاطلاع عليه بتاريخ 8 أغسطس 2025 .
  103. " تغييرات ميزات بيئة المستخدم" . oracle.com . شركة أوراكل . 2012. تم الاطلاع عليه في 6 يوليو 2026. يُقدّم نظام أوراكل سولاريس 11 تغييرات في بيئة المستخدم ومعاملات سطر الأوامر، وتشمل ما يلي: تغييرات في الصدفة - الصدفة الافتراضية، /bin/sh، مرتبطة الآن بـ ksh93. صدفة المستخدم الافتراضية هي صدفة بورن-أغين (bash).
  104. "Bash-4.3 متاح لبروتوكول نقل الملفات (FTP)" . bug-bash (قائمة بريدية). مشروع جنو . تم الاطلاع عليه بتاريخ 8 أغسطس 2025 .
  105. "CVE-2014-6271" . cve.org . تم الاطلاع عليه بتاريخ 8 أغسطس 2025 .
  106. "CVE-2014-7169" . cve.org . تم الاطلاع عليه بتاريخ 8 أغسطس 2025 .
  107. "التحديث الرسمي الأول لـ Bash 3.0" . bug-bash (قائمة بريدية). مشروع جنو . تم الاطلاع عليه بتاريخ 8 أغسطس 2025 .
  108. بريجل، أرمين (5 يونيو 2019). "الانتقال إلى zsh" . scriptingosx.com . تم الاطلاع عليه في 8 أغسطس 2025 .
  109. "دعم Apple - استخدم zsh كصدفة افتراضية على جهاز Mac الخاص بك" . apple.com . 15 يونيو 2026. تم الاطلاع عليه في 6 يوليو 2026 .
  110. وارن، توم (4 يونيو 2019). "أبل تستبدل باش بـ zsh كصدفة افتراضية في نظام macOS Catalina" . theverge.com . ذا فيرج . تم الاطلاع عليه في 6 يوليو 2019 .
  111. هيوز، ماثيو (4 يونيو 2019). "لماذا يستخدم نظام macOS Catalina برنامج Zsh بدلاً من Bash؟ الترخيص" . موقع The Next Web . تم الاطلاع عليه في 6 يوليو 2026 .
  112. "إصدار Bash-5.0 متوفر الآن" . bug-bash (قائمة بريدية). مشروع جنو . تم الاطلاع عليه بتاريخ 8 أغسطس 2025 .
  113. "إصدار Bash-5.1 متوفر الآن" . bug-bash (قائمة بريدية). مشروع جنو . تم الاطلاع عليه بتاريخ 8 أغسطس 2025 .
  114. "فهرس /gnu/bash" ، مؤسسة البرمجيات الحرة، مشروع جنو ، 29 أغسطس 1996 ، تم الاطلاع عليه في 6 يوليو 2026
  115. "فهرس /gnu/bash" . swin.edu.au. جامعة سوينبرن للتكنولوجيا . تم الاطلاع عليه بتاريخ 6 يوليو 2026 .
  116. "واجهة سطر الأوامر" . archlinux.org . 5 فبراير 2025. تم الاطلاع عليه في 8 أغسطس 2025 .
  117. هاني هلال (7 يناير 2015). "Gtkdialog - إنشاء واجهات رسومية (GTK+) ومربعات حوار باستخدام نصوص شل في لينكس" . tecmint.com . Tecmint . تاريخ الاسترجاع: 18 أغسطس 2025 .
  118. كريستيان كيسلينغ (2009). "إضافة عناصر رسومية إلى نصوصك البرمجية باستخدام Zenity وKDialog" . linux-magazine.com . مجلة لينكس. العدد 99. تاريخ الاطلاع: 18 أغسطس 2025 .
  119. "برمجة باش شل/ويبتيل" . wikibooks.org . ويكيميديا . تم الاطلاع عليه بتاريخ 18 أغسطس 2025 .
  120. ديمتري بوبوف (12 مارس 2012). "تزيين نصوص باش باستخدام YAD" . linux-magazine.com . مجلة لينكس . تم الاطلاع عليه بتاريخ 18 أغسطس 2025 .
  121. بيت ميتكالف (2021). "إنشاء مربعات حوار واجهة المستخدم الرسومية في سطر واحد من التعليمات البرمجية" . linux-magazine.com . مجلة لينكس. العدد 247. تاريخ الاسترجاع: 18 أغسطس 2025 .
  122. "IRIS :: أنظمة المعلومات التعليمية والبحثية :: الأسئلة الشائعة: يونكس :: حول أوامر يونكس" . berkeley.edu . جامعة كاليفورنيا، بيركلي . تم الاطلاع عليه بتاريخ 8 أغسطس 2025 .   
  123. جونز، م. (9 ديسمبر 2011). "تطور الصدف في لينكس: من بورن إلى باش وما بعدهما" . مطورو آي بي إم. ibm.com (دليل تعليمي). أرمونك، نيويورك: شركة آي بي إم . تم الاطلاع عليه في 5 يوليو 2026 .
  124. ستيفنسون، نيل (9 نوفمبر 1999). في البدء... كانت سطر الأوامر ( الطبعة الأولى). نيويورك: ويليام مورو وشركاه. ص 160. ISBN   978-0-380-81593-7.
  125. نيوهام، كاميرون؛ روزنبلات، بيل. "تعلم باش شيل، الطبعة الثانية" . oreilly.com . شركة أورايلي ميديا . تم الاطلاع عليه بتاريخ 8 أغسطس 2025. معاينة المحتوى
  126. "مرجع البرمجة النصية :: البرمجة النصية باستخدام Bourne-Again Shell (Bash)" . berkeley.edu . جامعة كاليفورنيا، بيركلي . تم الاطلاع عليه بتاريخ 19 مايو 2024 . 
  127. " مقدمة في برمجة سكريبتات شل" . apple.com . شركة آبل . تم الاطلاع عليه بتاريخ 8 أغسطس 2025. جميع الحقوق محفوظة لشركة آبل © 2003، 2014. ... تاريخ التحديث: 10 مارس 2014
  128. "دليل أسلوب كتابة شل" . github.io ( الإصدار 2.0). ماونتن فيو، كاليفورنيا: جوجل ذ.م.م. 16 يناير 2025. تم الاطلاع عليه في 5 يوليو 2026 . 
  129. بوزان، لويس (2 أبريل 1965). "ذا شيل: أداة عالمية لاستدعاء الإجراءات وتسلسلها في النظام" (وثيقة). معهد ماساتشوستس للتكنولوجيا . ص 37.