باش (يونكس)

بديل من GNU لقشرة Bourne
(بالتحويل من الباش)

باش (بالإنجليزية: Bash)‏ هو مُفسِّر سطر أوامر طُور ضمن مشروع جنو. والاسم هو اختصار لِـBourne-again shell — وهي تلاعب صوتي بين اسمي (Bourne again و born again، حيث أن الصدفة sh والمعروفة باسم كاتبها Bourne، والذي كان الغلاف الأوسع انتشارا في الفترة التي سبقت كتابة bash، وأحد أهم أجزاء نظام يونكس.

كانت صدفة بورن (Borne) قد وزعت مع النسخة السابعة من يونكس، في حدود عام 1978. والنسخة الأصلية منها كتبت على يد ستيفان بورن حيث كان في تلك الفترة أحد الباحثين في مختبرات بل. أما الصدفة باش فكتبت عام 1987 على يد براين فوكس. وفي عام 1990، أصبح شيت رامي (Chet Ramey) المطور الرئيسي للصدفة باش. وتستخدم باش ليوم كصدفة قياسية لمعظم نسخ لينكس وعلى نظام Mac OS X Tiger ويمكن تشغيلها على كل الأنظمة الشبيهة بيونكس تقريبا. كما تم استقدامها إلى بيئة مايكروسوفت ويندوز ضمن مشروعي Cygwin و DJGPP.

مميزات باش

عدل
  1. العمليات الرياضية الحسابية على الأرقام الحقيقية، يمكن للباش أن يقوم بالعمليات الحسابية دون الاستعانة بمكتبة أخرى
  2. تحويل الإدخال والإخراج، يمكن تغيير وسيط الإدخال والإخراج الافتراضيين وهما لوحة المفاتيح والشاشة إلى أي وحدة أخرى مثل الطابعة والقارئ الضوئي أو حتى القراءة من ملف والكتابة إلى ملف

Bash هو معالج أوامر الذي عادة يعمل في نافذة نص، مما يتيح للمستخدم أن يكتب الأوامر التي تتسبب في الإجراءات. Bash يمكنه أيضا قراءة الأوامر من الملف. الذي يسمى سكريبت (نص). مثل جميع أوعية يونيكس، وهو يدعم اسم الملف، wildcarding و piping و here documents و command substitution و variables و control structures لأختبار الحالة والتكرار condition-testing and iteration. تم نسخ جميع الكلمات الرئيسية وقواعد اللغة والميزات الأساسية الأخرى للغة من الخصائص الأخرى لـ sh، على سبيل المثال، التاريخ history، تم نسخه من csh و ksh. Bash هي وعاء بوسيكس POSIX لكن مع عدد من الملحقات.

الاسم نفسه هو اختصار، كناية ووصفية. كاختصارا، لأنها مترشحة لوعاء بورن Bourne shell ثانيةً، بإشارة إلى هدفها كبديل حر لبورن Bourne شل Bourne shell.[5] ككناية، وحددت أن الهدف في العبارة الذي يبدو كما لو كانت ولدت من جديد،born again وهو مصطلح لولادة جديدة الروحية.[6][7] اسم وصفي أيــضا لما فعلت، يســـحق معاً مميزات sh و csh و ksh.[8]

التاريخ

عدل

فوكس بدأ ترميز Bash في 10 يناير 1988 [9] بعد أن أصبح ريتشارد ستالمان غير راض عن عدم وجود تقدم يحرزه من المطور السابق ستالمان ومؤسسة البرمجيات الحرة (إف إس إف) Free Software Foundation (FSF) تعتبر الوعاء الحرة التي يمكن أن تشغيل نص sh الحالي خطة الاستراتيجية إلى نظام حر من ترميز BSD و GNU بأن هذا كان واحدا من المشاريع القليلة التي أسسوها بأنفسهم، مع تعهد فوكس القيام بالعمل كموظف في مؤسسة البرمجيات الحرة FSF. ريتشارد ستولمن (3 أكتوبر 2010). "About the GNU Project". مؤسسة البرمجيات الحرة. مؤرشف من الأصل في 2019-11-09. اطلع عليه بتاريخ 2011-03-21. Free Software Foundation employees have written and maintained a number of GNU software packages. Two notable ones are the C library and the shell.... We funded development of these programs because the GNU Project was not just about tools or a development environment. Our goal was a complete operating system, and these programs were needed for that goal. </ref>. فوكس أصدرت Bash باعتباره بيتا، الإصدار.99، في 7 يونيو 1989 وظل المصين الابتدائي حتى بين في منتصف عام 1992 [10]، ومنتصف عام 1994,[11] عندما تم الاستغناء عنه من قبل مؤسسة البرمجيات الحرة FSF [12] وانتقلت مسؤوليته لمساهم آخر في وقت مبكر، شيت رامي Chet Ramey.[13][14][15]

المميزات

عدل

صيغة أمر Bash مجموعة شاملة من صيغ أمر وعاء بورن Bourne shell. الغالبية العظمى من نصوص وعاء بورن Bourne shell يمكن تنفيذها بواسطة Bash بدون تعديل، باستثناء نصوص وعاء بورن Bourne shell المتعثرة في الصيغ الهامشية وتفسير سلوكها مختلف في Bash أو عن طريق محاولة تشغيل أوامر مطابقة لنظام Bash أحدث المدمج، وما إلى ذلك. قواعد أمر Bash تتضمن أفكار مستمدة من وعاء كورن Korn shell (ksh) ووعاء C C shell (csh) مثل تحرير سطر الأوامر، وتاريخ الأمر، دليل المكدس، ومتغيرات $RANDOM و$PPID، وقواعد استبدال الأمر بوسيكس POSIX command substitution syntax $(…). عندما تستخدم كوعاء لأمر تفاعلي والضغط على مفتاح Tab، تلقائيا سوف يتستخدم Bash استكمال سطر الأمر للمطابقة الجزئية لأسماء البرامج، وأسماء الملفات وأسماء المتغيرات.

قواعد Bash لها أمتدادات كثيرة التي تفتقر إليها وعاء بورنShell Bourne. يمكن لـ Bash أداء الحسابات للأرقام الصحيحة دون توليد لعمليات خارجية، خلافا لوعاء بورنshell Bourne. Bash يستخدم أمر ((...)) و((...))$ قواعد اللغة المتغيرة لهذا الغرض. قواعد Bash تبسط إعادة التوجيه I/O redirection بطرق ليست ممكنة في وعاء بورن Bourne Shell التقليدي. على سبيل المثال، Bash يمكنه توجيه الإخراج القياسي standard output (stdout)، والخطأ المعياري standard error (stderr) في نفس الوقت باستخدام مشغل &>. وهذا أبسط من كتابة الأمر الذي يعادله في وعاء بورن Bourne shell> file 2>&1'. عند استخدام الكلمة المفتاحية 'function' فإن عرض وظيفة Bash غير متوافقة مع نصوص Bourne/Korn/POSIX (الوعاء كورن Korn shell لديه نفس المشكلة عند استخدام 'function')، ولكن Bash يقبل نفس قواعد عرض الوظيفة كما في أوعية بورن Bourne وأوعية كورن Korn، ومتوافقة مع مقياس POSIX. وبسبب هذه الخلافات وغيرها، نصوص وعاء Bash نادرا ما يتم العمل بها من قبل مترجمين وعاء بورن shell Bourne أو كورن korn shell إلا عندما يتم كتابتها عمداً مع وضع هذا التوافق في الاعتبار، والذي أصبحت أقل شيوعا عندما أصبحت لينكس أكثر انتشارا. ولكن في وضع بوسيكس، POSIX mode ,[16] فإن مطابقة Bash مع بوسيكس Posix هو مثالي.

Bash يدعم هنا الوثائق here documents مثل ما تفعل دائماً وعاء بورن Bourne shell. ومع ذلك، منذ الإصدار b 2.05 أصبح Bash يمكنه إعادة توجيه الإدخال القياسي standard input (stdin) من "here string" باستخدام مشغل <<<operator.

3.0 Bash يدعم مطابقة المصطلح العادي قيد المعالجة باستخدام تذكر(تشبيه) قواعد بيرل Perl [17]

4.0 Bash يدعم المصفوفات الارتباطية associative arrays [16] تسمح بدعم مزيف للمصفوفات متعدد الأبعاد، بطريقة مماثلة لأووك awk :

declare -A a # declare an associative array 'a'
i=1; j=2 # initialize some indices
a[$i,$j]=5 # associate value "5" to key "$i,$j" (i.e. "1,2")
echo ${a[$i,$j]} # print the stored value at key "$i,$j"

توسيع الأقواس

عدل

توسيع الأقواس المزدوجة، وتسمى أيضا التعاقب، هي ميزة نسخت من وعاء C الذي يولد مجموعة من توليفات بديلة. النتائج المتولدة لا تحتاج أن تكون كملفات. نتائج كل سلسلة موسعة لا يتم فرزها وأمر من واليسار إلى اليمين محفوط :

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 لن تنتج نفس المخرجات.

# A traditional shell does not produce the same output
echo a{p,c,d,b}e # a{p,c,d,b}e

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

ls *.{jpg,jpeg,png} # expands to *.jpg *.jpeg *.png - after which,
                       # the wildcards are processed

نصوص بدء التشغيل

عدل

عندما يبدأ Bash، فإنه ينفيذ الأوامر في مجموعة متنوعة من نصوص مختلفة.

عندما يتم استدعاء Bash كوعاء الدخول التفاعلي، فإنه يقرأ أولا وينفيذ الأوامر من الملف /etc/profile، إذا كان هذا الملف موجودا. بعد قراءة هذا الملف، فإنه يبحث عن ~/.bash_profile و~/.bash_login, و~/.profile، في هذا الأمر، ويقرأ وينفذ الأوامر من أول واحد موجود وقابل للقراءة.

عندما يخرج وعاء الدخول، فإن Bash يقرأ وينفذ الأوامر من الملف ~/.bash_logout، إذا كان موجودا.

عندما يبدأ الوعاء (القشرة) التفاعلي الذي ليس هو فقط وعاء تسجيل الدخول، فإن Bash يقرأ وينفذ الأوامر من ~/.bashrc، إذا كان هذا الملف موجودا. وهذا يمكن أن يثبط باستخدام—norc option. --.خيار الملف –rcfile سوف يجبر Bash على قراءة وتنفيذ الأوامر من الملف بدلا من ~/.bashrc..

بعض إصدارات يونيكس لديها نصوص نظام ملتوي ل Bash الذي تنتهك بشكل فعال أمر تحميل النصوص الشرعية عن طريق تحميل النصوص في وقت مبكر جدا أو محاولة الجمع بين بدء تشغيل Bash مع نصوص بدء التشغيل لأوعية (قشور) أخرى بطرق مختلفة. [citation needed]

قابلية النقل

عدل

نصوص الوعاء (القشرة) المكتوبة بـميزات Bash المحددة (bashisms) لن تعمل على نظام يستخدم وعاء بورن Bourne shell أو أحد بدائلها، ما لم يتم أيضا تثبيت Bash وجعل النص يبدأ بـ "shebang line" من #!/bin/bash موجه المترجم interpreter directive بدلا من #!/bin/sh.

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

عدل

الاختصارات التالية تعمل عند استخدام الارتباطات الرئيسية الافتراضية (ايماكس). الحاق Vi- ممكنة عن طريق تشغيل مجموعة -o vi.

  • Tab ⇆ : الاستكمال التلقائي من موضع المؤشر.
  • Ctrl + a : يحرك المؤشر إلى بداية السطر (أي ما يعادل مفتاح Home).
  • Ctrl + e : (end) ينقل المؤشر إلى نهاية السطر (أي ما يعادل مفتاح end).
  • Ctrl + p : (previous) تشير إلى الأوامر السابقة (ما يعادل مفتاح ↑).
  • Ctrl +n : (next) تشير إلى الأمر التالي (ما يعادل مفتاح ↓).
  • Ctrl + r : (research) تشير إلى الأمر الأخير بما في ذلك الحرف المحدد (s). و Ctrl + r آخرى تشير إلى الأمر التالي الأمامي الذي يتوافق مع البحث.
  • Ctrl + s : العودة إلى الأمر التالي الأكثر حداثة من البحث (أحذر عدم تنفيذه من الطرف لأن هذا الأمر أيضا ينفذ XOFF الخاصة به). إذا قمت بتغيير هذا الإعداد XOFF، استخدام Ctrl + q للعودة.
  • Ctrl + o : تنفيذ الأمر الذي وجد من البحوث.
  • Ctrl + l : مسح محتوى الشاشة (أي ما يعادل الأمر clear).
  • Ctrl + u : يمسح محتوى السطر قبل المؤشر ونسخه إلى الحافظة clipboard.
  • Ctrl + k : يمسح المحتوى السطر بعد المؤشر ونسخه إلى الحافظة clipboard.
  • Ctrl + w : يمسح الكلمة قبل المؤشر ونسخها إلى الحافظة clipboard.
  • Ctrl + y : (yank) ويضيف محتوى الحافظة clipboard من موضع المؤشر.
  • Ctrl + d : يرسل علامة EOF، والتي (إلا إذا تم تعطيلها بالاختيار) يغلق الوعاء (القشرة) الحالي (ما يعادل الأمر خروج exit). (إلا إذا كانت لا يوجد هناك أي نص على السطر الحالي).
  • Ctrl + c : يرسل إشارة SIGINT إلى المهمة الحالية، الذي يحبطها يوقفها ويغلقها.
  • Ctrl + z :يرسل إشارة SIGTSTP إلى المهمة الحالية، التي تعطلها. لتنفذها في الخلفية يمكن أن يدخل bg. لإعادتها من الخلفية أو تعليقها fg ['اسم العملية أو الوظيفة id'] يمكن جعلها (foreground).
  • Ctrl+x Ctrl+x : (لأن X لديها شكل متقاطع) يناوب المؤشر مع موقعه القديم.
  • Ctrl+x Ctrl+e : يكتب السطر الحالي في برنامج $EDITOR، أو vi إذا كان غير معروف.
  • Alt + f : (forward) ينقل المؤشر أماماً لكلمة واحدة.
  • Alt + b : (backward) يحرك المؤشر إلى الوراء كلمة واحدة.
  • del+ Alt : يقطع الكلمة قبل المؤشر.
  • Alt + d : يقطع الكلمة بعد المؤشر.
  • Alt + u : يجعل كل الأحرف كبيرة من موقع المؤشر إلى نهاية الكلمة الحالية.
  • Alt + l : يجعل كل الأحرف صغيرة من موقع المؤشر إلى نهاية الكلمة الحالية.
  • Alt + c : يجعل كل الأحرف كبيرة تحت المؤشر وينتقل إلى نهاية الكلمة.
  • Alt + r : يلغي التغييرات ويعيد الخط على النحو الذي كان عليه في التاريخ.

المراجع

عدل
  1. ^ مذكور في: دليل البرمجيات الحرة. دليل البرمجيات الحرة: bash. الوصول: 2 فبراير 2022.
  2. ^ وصلة مرجع: https://www.aosabook.org/en/bash.html. الوصول: 9 سبتمبر 2020.
  3. ^ ا ب مذكور في: جنو جيكس. معرف جنو جيكس: bash. الوصول: 17 يونيو 2020.
  4. ^ "Index of /gnu/bash". اطلع عليه بتاريخ 2024-12-04.
  5. ^ C Programming by Al Stevens, Dr. Dobb's Journal, July 1, 2001 نسخة محفوظة 01 مارس 2009 على موقع واي باك مشين.
  6. ^ ريتشارد ستولمن (12 نوفمبر 2010). "About the GNU Project". مؤسسة البرمجيات الحرة. مؤرشف من الأصل في 2019-04-27. اطلع عليه بتاريخ 2011-03-13. "Bourne Again Shell" is a play on the name "Bourne Shell", which was the usual shell on Unix.
  7. ^ Gattol، Markus (13 مارس 2011)، Bourne-again Shell، مؤرشف من الأصل في 2019-03-30، اطلع عليه بتاريخ 2011-03-13، The name is a pun on the name of the Bourne shell (sh), an early and important Unix shell written by Stephen Bourne and distributed with Version 7 Unix circa 1978, and the concept of being "born again".
  8. ^ Ian Darwin (13 يونيو 1989). "at&t-free ksh (was: job control is a bug, not a feature)". نيوز جروب: comp.os.minix. مؤرشف من الأصل في 2012-11-10. اطلع عليه بتاريخ 2011-03-21. Yup, the gnu project's Born Again Shell ("bash") is an attempt at bashing all the features of sh together with many of those from both csh and ksh.
  9. ^ Brian Fox (29 أغسطس 1996)، shell.c، مؤسسة البرمجيات الحرة، مؤرشف من الأصل في 2018-09-28، Birthdate: Sunday, January 10th, 1988. Initial author: Brian Fox
  10. ^ len (g...@prep.ai.mit.edu) (April 20, 1993). "January 1993 GNU's Bulletin". نيوز جروب: gnu.announce. gnusenet930421bulletin@prep.ai.mit.edu. مؤرشف من الأصل في 9 نوفمبر 2012. اطلع عليه بتاريخ Oct 28 2010. {{استشهاد بمجموعة أخبار}}: تحقق من التاريخ في: |تاريخ الوصول= (مساعدة)
  11. ^ Ramey، Chet (1 أغسطس 1994). "Bash - the GNU shell (Reflections and Lessons Learned)". لينكس جورنال. مؤرشف من الأصل في 2018-11-07. اطلع عليه بتاريخ 2008-11-13.
  12. ^ Chet Ramey (October 31, 2010)، Dates in your Computerworld interview، مؤرشف من الأصل في 2016-05-27، اطلع عليه بتاريخ Oct 31 2010 {{استشهاد}}: تحقق من التاريخ في: |تاريخ الوصول= (مساعدة)
  13. ^ Chet Ramey (June 12, 1989). "Bash 0.99 fixes & improvements". نيوز جروب: gnu.bash.bug. مؤرشف من الأصل في 10 نوفمبر 2012. اطلع عليه بتاريخ Nov 1 2010. {{استشهاد بمجموعة أخبار}}: تحقق من التاريخ في: |تاريخ الوصول= (مساعدة)
  14. ^ Chet Ramey (July 24, 1989). "Some bash-1.02 fixes". نيوز جروب: gnu.bash.bug. مؤرشف من الأصل في 10 نوفمبر 2012. اطلع عليه بتاريخ Oct 30 2010. {{استشهاد بمجموعة أخبار}}: تحقق من التاريخ في: |تاريخ الوصول= (مساعدة)
  15. ^ Brian Fox (March 2, 1990). "Availability of bash 1.05". نيوز جروب: gnu.bash.bug. مؤرشف من الأصل في 10 نوفمبر 2012. اطلع عليه بتاريخ Oct 30 2010. {{استشهاد بمجموعة أخبار}}: تحقق من التاريخ في: |تاريخ الوصول= (مساعدة)
  16. ^ ا ب "6.11 Bash POSIX Mode"، The GNU Bash Reference Manual, for Bash, Version 4.1، December 23, 2009، مؤرشف من الأصل في 2019-05-20، اطلع عليه بتاريخ Oct 26 2010 {{استشهاد}}: تحقق من التاريخ في: |تاريخ الوصول= (مساعدة)
  17. ^ The syntax matches that shown on the regex(7) صفحة دليل (يونكس). "نسخة مؤرشفة". مؤرشف من الأصل في 2017-12-24. اطلع عليه بتاريخ 2011-05-24.{{استشهاد ويب}}: صيانة الاستشهاد: BOT: original URL status unknown (link)

وصلات خارجية

عدل