- ملخص
- الوصف
- نظرة عامة
- الاستدعاء
- معالجة قائمة الوسائط
- البنية المعجمية
- الاقتباس
- الشرطة المائلة للخلف
- علامات الاقتباس المفردة
- علامات الاقتباس المزدوجة
- الكلمات المحجوزة
- الأسماء المستعارة
- الأوامر
- الأوامر البسيطة
- عمليات إعادة التوجيه
- البحث والتنفيذ
- البحث عن المسار
- حالة الخروج الخاصة بالأمر
- الأوامر المعقدة
- خطوط الأنابيب
- الأوامر في الخلفية - &
- القوائم - بشكل عام
- عوامل التشغيل المنطقية للقوائم
- هياكل التحكم في التدفق - if و while و for و case
- تجميع الأوامر معًا
- الدوال
- المتغيرات والبارامترات
- البارامترات الموضعية
- البارامترات الخاصة
- توسيعات الكلمات
- توسيع التيْلْدَة (استبدال دليل المستخدم الرئيسي)
- توسيع المعلمات
- استبدال الأوامر
- التوسع الحسابي
- تقسيم المسافات البيضاء (تقسيم الحقول)
- توسيع اسم المسار (توليد اسم الملف)
- أنماط الصدفة
- الأوامر المضمنة
- تحرير سطر الأوامر
- رمز الخروج
- البيئة
- الملفات
- انظر أيضًا
- التاريخ
- الأخطاء
dash — مترجم الأوامر (صدفة)
ملخص
dash [-aCefnuvxIimqVEbp] [+aCefnuvxIimqVEbp] [-o option_name] [+o option_name]
[command_file [argument ...]]
dash -c [-aCefnuvxIimqVEbp] [+aCefnuvxIimqVEbp] [-o option_name] [+o option_name] command_string
[command_name [argument ...]]
dash -s [-aCefnuvxIimqVEbp] [+aCefnuvxIimqVEbp] [-o option_name] [+o option_name] [argument ...]
الوصف
dash هو مترجم الأوامر القياسي للنظام. يتم حاليًا تعديل الإصدار الحالي من dash ليتوافق مع مواصفات POSIX 1003.2 و 1003.2a للصدفة. يحتوي هذا الإصدار على العديد من الميزات التي تجعله يبدو مشابهًا في بعض النواحي لصدفة Korn، ولكنه ليس نسخة طبق الأصل من صدفة Korn (انظر ksh(1)). يتم دمج الميزات التي تحددها POSIX، بالإضافة إلى بعض الإضافات من Berkeley، في هذه الصدفة. لا يهدف هذا الدليل إلى أن يكون بمثابة برنامج تعليمي أو مواصفات كاملة للصدفة.
نظرة عامة
الصدفة هي أمر يقرأ الأسطر من ملف أو من الطرفية، ويقوم بتفسيرها، وعادةً ما ينفذ أوامر أخرى. إنه البرنامج الذي يعمل عندما يسجل المستخدم الدخول إلى النظام (على الرغم من أن المستخدم يمكنه تحديد صدفة مختلفة باستخدام الأمر chsh(1)). تنفذ الصدفة لغة تحتوي على هياكل تحكم في التدفق، ومرفق ماكرو يوفر مجموعة متنوعة من الميزات بالإضافة إلى تخزين البيانات، إلى جانب ميزات مدمجة لتاريخ الأوامر وتحرير الأسطر. تتضمن العديد من الميزات للمساعدة في الاستخدام التفاعلي ولها الميزة المتمثلة في أن اللغة التفسيرية شائعة لكل من الاستخدام التفاعلي وغير التفاعلي (برامج نصية للصدفة). بمعنى آخر، يمكن كتابة الأوامر مباشرةً إلى الصدفة التي تعمل أو يمكن وضعها في ملف ويمكن تنفيذ الملف مباشرةً بواسطة الصدفة.
الاستدعاء
إذا لم تكن هناك وسيطات، وإذا كان الإدخال القياسي للصدفة متصلاً بوحدة طرفية (أو إذا تم تعيين العلامة -i)، وإذا لم يكن الخيار -c موجودًا، فسيتم اعتبار الصدفة صدفة تفاعلية. عادةً ما تطلب الصدفة التفاعلية قبل كل أمر وتعالج أخطاء البرمجة والأوامر بشكل مختلف (كما هو موضح أدناه). عند البدء لأول مرة، تفحص الصدفة الوسيطة 0، وإذا بدأت بـ شرطة ‘-‘، فسيتم اعتبار الصدفة أيضًا صدفة تسجيل دخول. يتم ذلك عادةً تلقائيًا بواسطة النظام عند تسجيل دخول المستخدم لأول مرة. تقرأ صدفة تسجيل الدخول أولاً الأوامر من الملفات /etc/profile و .profile إذا كانت موجودة. إذا تم تعيين متغير البيئة ENV عند الدخول إلى صدفة تفاعلية، أو تم تعيينه في ملف .profile لصدفة تسجيل الدخول، فإن الصدفة تقرأ بعد ذلك الأوامر من الملف المسمى في ENV. لذلك، يجب على المستخدم وضع الأوامر التي سيتم تنفيذها فقط عند تسجيل الدخول في ملف .profile، ووضع الأوامر التي يتم تنفيذها لكل صدفة تفاعلية في ملف ENV. لتعيين متغير ENV إلى ملف ما، ضع السطر التالي في ملف .profile في الدليل الرئيسي الخاص بك.
ENV=$HOME/.shinit; export ENV
مع إمكانية استبدال “.shinit” بأي اسم ملف تريده.
إذا تم تحديد وسيطات سطر الأوامر بالإضافة إلى الخيارات، فإن shell يعامل الوسيطة الأولى كاسم ملف لقراءة الأوامر منه (نص برمجي)، وتُعيّن الوسيطات المتبقية كمعلمات موضعية لـ shell ($1، $2، إلخ). وإلا، فإن shell يقرأ الأوامر من الإدخال القياسي.
معالجة قائمة الوسائط
يمكن استخدام جميع خيارات الأحرف المفردة التي لها اسم مقابل كوسيطة لـ -o. يتم توفير set -o name بجانب خيار الأحرف المفردة في الوصف أدناه. يؤدي تحديد شرطة "-" إلى تشغيل الخيار، بينما يؤدي استخدام علامة زائد "+" إلى تعطيل الخيار. يمكن تعيين الخيارات التالية من سطر الأوامر أو باستخدام الأمر set المدمج (الموصوف لاحقًا).
-a allexport تصدير جميع المتغيرات المعينة.
-c قراءة الأوامر من وسيطة `command_string` بدلاً من الإدخال القياسي. سيتم تعيين المعلمة الخاصة `$0` من وسيطة `command_name` وسيتم تعيين المعلمات الموضعية ($1، $2، إلخ) من وسائط الوسائط المتبقية.
-C noclobber عدم الكتابة فوق الملفات الموجودة باستخدام ">".
-e errexit إذا لم يكن تفاعليًا، فقم بالخروج على الفور إذا فشل أي أمر غير مختبر. يعتبر حالة الخروج الخاصة بالأمر قد تم اختبارها بشكل صريح إذا تم استخدام الأمر للتحكم في `if` أو `elif` أو `while` أو `until`؛ أو إذا كان الأمر هو المعامل الأيسر لـ "&&" أو "||".
-f noglob تعطيل توسيع اسم المسار.
-n noexec إذا لم يكن تفاعليًا، فاقرأ الأوامر ولكن لا تنفذها. هذا مفيد للتحقق من بناء جملة نصوص shell.
-u nounset اكتب رسالة إلى الخطأ القياسي عند محاولة توسيع متغير غير معين، وإذا لم يكن shell تفاعليًا، فاخرج على الفور.
-v verbose يكتب shell إدخاله إلى الخطأ القياسي أثناء قراءته. مفيد لتصحيح الأخطاء.
-x xtrace اكتب كل أمر إلى الخطأ القياسي (مسبوقًا بـ "+") قبل تنفيذه. مفيد لتصحيح الأخطاء.
-I ignoreeof تجاهل EOF من الإدخال عند التفاعل.
-i interactive أجبر shell على التصرف بشكل تفاعلي.
-l اجعل dash يتصرف كما لو تم استدعاؤه كـ shell تسجيل دخول.
-m monitor قم بتشغيل التحكم في الوظائف (يتم تعيينه تلقائيًا عند التفاعل).
-s stdin قراءة الأوامر من الإدخال القياسي (يتم تعيينه تلقائيًا إذا لم تكن هناك وسيطات ملف). هذا الخيار ليس له تأثير عند تعيينه بعد بدء تشغيل shell بالفعل (أي باستخدام الأمر `set`).
-V vi تفعيل محرر الأوامر vi(1) المدمج (يعطل -E إذا تم تعيينه).
-E emacs تفعيل محرر الأوامر [emacs](filename}emacs.md)(1) المدمج (يعطل -V إذا تم تعيينه).
-b notify تفعيل الإشعار غير المتزامن عند اكتمال مهمة الخلفية. (غير مُنفَّذ للإصدار 4.4alpha).
-p privileged عدم محاولة إعادة تعيين معرف المستخدم الفعلي إذا لم يتطابق مع معرف المستخدم. هذا غير مُعيَّن افتراضيًا للمساعدة في تجنب الاستخدام غير الصحيح بواسطة البرامج ذات الامتيازات الجذر عبر system(3) أو popen(3).
البنية المعجمية
يقرأ الصدفة الإدخال على هيئة أسطر من ملف ويقسمه إلى كلمات عند المسافات (الفراغات والمسافات البادئة)، وعند بعض تسلسلات الأحرف التي لها معنى خاص بالنسبة للصدفة تُسمى "عوامل التشغيل". هناك نوعان من عوامل التشغيل: عوامل تشغيل التحكم وعوامل تشغيل إعادة التوجيه (سيتم مناقشة معناها لاحقًا). فيما يلي قائمة بعوامل التشغيل:
عوامل تشغيل التحكم:
& && ( ) ; ;; | ||
عوامل تشغيل إعادة التوجيه: < > >| << >> <& >& <<- <>
الاقتباس
يُستخدم الاقتباس لإزالة المعنى الخاص لبعض الأحرف أو الكلمات في الصدفة، مثل عوامل التشغيل والمسافات والكلمات الرئيسية. هناك ثلاثة أنواع من الاقتباس: علامات الاقتباس المفردة المتطابقة، وعلامات الاقتباس المزدوجة المتطابقة، وشرطة مائلة للخلف.
الشرطة المائلة للخلف
تحافظ الشرطة المائلة للخلف على المعنى الحرفي للحرف التالي، باستثناء ⟨newline⟩. يتم التعامل مع الشرطة المائلة للخلف التي تسبق ⟨newline⟩ على أنها استمرار للسطر.
علامات الاقتباس المفردة
يؤدي تضمين الأحرف في علامات الاقتباس المفردة إلى الحفاظ على المعنى الحرفي لجميع الأحرف (باستثناء علامات الاقتباس المفردة، مما يجعل من المستحيل وضع علامات الاقتباس المفردة داخل سلسلة محاطة بعلامات اقتباس مفردة).
علامات الاقتباس المزدوجة
يؤدي تضمين الأحرف داخل علامات الاقتباس المزدوجة إلى الحفاظ على المعنى الحرفي لجميع الأحرف باستثناء علامة الدولار ($) والشرطة المائلة للخلف () والشرطة المائلة للخلف (\). الشرطة المائلة للخلف داخل علامات الاقتباس المزدوجة لها معنى غريب تاريخيًا، وتستخدم فقط لإلغاء الأحرف التالية:
$ " \
الكلمات المحجوزة
الكلمات المحجوزة هي الكلمات التي لها معنى خاص بالنسبة للصدفة ويتم التعرف عليها في بداية السطر وبعد عامل تشغيل التحكم. الكلمات المحجوزة التالية هي:
! elif fi while case
else for then { }
do done until if esac
سيتم مناقشة معناها لاحقًا.
الأسماء المستعارة
الاسم المستعار هو اسم وقيمة مقابلة يتم تعيينها باستخدام الأمر المدمج alias(1). في كل مرة قد تظهر فيها كلمة محجوزة (انظر أعلاه)، وبعد التحقق من الكلمات المحجوزة، تتحقق الصدفة من تطابق الكلمة مع اسم مستعار. إذا كان الأمر كذلك، فإنه يستبدلها في دفق الإدخال بقيمتها. على سبيل المثال، إذا كان هناك اسم مستعار يسمى "lf" بقيمة "ls -F"، فسيكون الإدخال:
lf foobar ⟨return⟩
سيصبح
ls -F foobar ⟨return⟩
توفر الأسماء المستعارة طريقة مريحة للمستخدمين المبتدئين لإنشاء اختصارات للأوامر دون الحاجة إلى تعلم كيفية إنشاء وظائف مع وسيطات. يمكن أيضًا استخدامها لإنشاء تعليمات برمجية غامضة معجميًا. لا يُشجع هذا الاستخدام.
الأوامر
تفسر الصدفة الكلمات التي تقرأها وفقًا للغة، وتحديد مواصفاتها خارج نطاق هذه الصفحة (راجع BNF في مستند POSIX 1003.2). بشكل أساسي، يتم قراءة سطر، وإذا كانت الكلمة الأولى في السطر (أو بعد عامل التحكم) ليست كلمة محجوزة، فإن الصدفة تكون قد تعرفت على أمر بسيط. خلاف ذلك، قد يكون تم التعرف على أمر معقد أو بناء خاص آخر.
الأوامر البسيطة
إذا تم التعرف على أمر بسيط، تقوم الصدفة بتنفيذ الإجراءات التالية:
يتم تجريد الكلمات الأولى التي تكون على شكل "name=value" وتعيينها لبيئة الأمر البسيط. يتم تجريد عوامل تشغيل إعادة التوجيه وحججها (كما هو موضح أدناه) وحفظها للمعالجة.
يتم توسيع الكلمات المتبقية كما هو موضح في القسم المسمى "التوسعات"، وتعتبر الكلمة الأولى المتبقية اسم الأمر، ويتم تحديد موقع الأمر. تعتبر الكلمات المتبقية حجج الأمر. إذا لم ينتج اسم الأمر، فإن عمليات تعيين المتغيرات "name=value" التي تم التعرف عليها في العنصر 1 تؤثر على الصدفة الحالية.
يتم تنفيذ عمليات إعادة التوجيه كما هو موضح في القسم التالي.
عمليات إعادة التوجيه
تُستخدم عمليات إعادة التوجيه لتغيير مكان قراءة الأمر لمدخلاته أو إرسال مخرجاته. بشكل عام، تفتح عمليات إعادة التوجيه أو تغلق أو تكرر مرجعًا موجودًا لملف. التنسيق العام المستخدم لعملية إعادة التوجيه هو:
[n] redir-op file
حيث يكون redir-op أحد عوامل تشغيل إعادة التوجيه المذكورة سابقًا. فيما يلي قائمة بعمليات إعادة التوجيه المحتملة. [n] هو رقم اختياري بين 0 و 9، كما في "3" (وليس "[3] ")، يشير إلى واصف ملف.
[n]> file إعادة توجيه الإخراج القياسي (أو n) إلى ملف.
[n]>| file نفس الشيء، ولكن تجاوز خيار -C.
[n]>> file إلحاق الإخراج القياسي (أو n) بالملف.
[n]< file إعادة توجيه الإدخال القياسي (أو n) من ملف.
[n1]<&n2 نسخ واصف الملف n2 كـ stdout (أو fd n1). fd n2.
[n]<&- إغلاق الإدخال القياسي (أو n).
[n1]>&n2 نسخ واصف الملف n2 كـ stdin (أو fd n1). fd n2.
[n]>&- إغلاق الإخراج القياسي (أو n).
[n]<> file فتح ملف للقراءة والكتابة على الإدخال القياسي (أو n).
تُسمى عملية إعادة التوجيه التالية غالبًا "مستند هنا".
[n]<< delimiter
here-doc-text ...
delimiter
يتم حفظ جميع النصوص الموجودة في الأسطر اللاحقة حتى المحدد وتوفيرها للأمر على الإدخال القياسي، أو واصف الملف n إذا تم تحديده. إذا تم تحديد المحدد الموجود في السطر الأولي بعلامات اقتباس، فسيتم التعامل مع النص الموجود في "here-doc-text" حرفيًا، وإلا فسيتم تعريضه لتوسيع المعلمات، واستبدال الأوامر، وتوسيع العمليات الحسابية (كما هو موضح في القسم الخاص بـ "التوسعات"). إذا كان العامل هو "<<-" بدلاً من "<<"، فسيتم حذف المسافات البادئة الموجودة في بداية "here-doc-text".
البحث والتنفيذ
هناك ثلاثة أنواع من الأوامر: الدوال المضمنة في الصدفة، والأوامر المضمنة، والبرامج العادية – ويتم البحث عن الأمر (بالاسم) بهذا الترتيب. وكل منها يتم تنفيذه بطريقة مختلفة.
عند تنفيذ دالة مضمنة في الصدفة، يتم تعيين جميع معلمات الموضع في الصدفة (باستثناء $0، الذي يظل دون تغيير) إلى وسيطات الدالة. والمتغيرات التي يتم تعيينها بشكل صريح في بيئة الأمر (عن طريق وضع عمليات التعيين لها قبل اسم الدالة) يتم إجراؤها محليًا للدالة ويتم تعيينها للقيم المعطاة. ثم يتم تنفيذ الأمر المحدد في تعريف الدالة. يتم استعادة معلمات الموضع إلى قيمها الأصلية عند اكتمال الأمر. كل هذا يحدث داخل الصدفة الحالية.
يتم تنفيذ الأوامر المضمنة داخليًا في الصدفة، دون إنشاء عملية جديدة.
بخلاف ذلك، إذا لم يتطابق اسم الأمر مع دالة أو أمر مضمن، يتم البحث عن الأمر كبرنامج عادي في نظام الملفات (كما هو موضح في القسم التالي). عند تنفيذ برنامج عادي، تقوم الصدفة بتشغيل البرنامج، وتمرير الوسيطات والبيئة إلى البرنامج. إذا لم يكن البرنامج ملفًا تنفيذيًا عاديًا (أي، إذا لم يبدأ بـ "الرقم السحري" الذي يمثل تمثيله ASCII "#!"، بحيث تُرجع execve(2) خطأ ENOEXEC)، فستقوم الصدفة بتفسير البرنامج في صدفة فرعية. ستقوم الصدفة الفرعية بإعادة تهيئة نفسها في هذه الحالة، بحيث يكون التأثير كما لو تم استدعاء صدفة جديدة للتعامل مع البرنامج النصي المؤقت، باستثناء أن موقع الأوامر المخزنة مؤقتًا في الصدفة الأصلية سيتم تذكره بواسطة الصدفة الفرعية.
لاحظ أن الإصدارات السابقة من هذه الوثيقة ومصدر التعليمات البرمجية نفسه تشير بشكل مضلل ومتفرق إلى برنامج نصي في الصدفة بدون رقم سحري باسم "إجراء الصدفة".
البحث عن المسار
عند تحديد موقع الأمر، تبحث الصدفة أولاً لمعرفة ما إذا كان لديها دالة مضمنة في الصدفة بهذا الاسم. ثم تبحث عن أمر مضمن بهذا الاسم. إذا لم يتم العثور على أمر مضمن، يحدث أحد أمرين:
* يتم تنفيذ أسماء الأوامر التي تحتوي على شرطة مائلة ببساطة دون إجراء أي عمليات بحث.
* تبحث الصدفة في كل إدخال في `PATH` بالتناوب للعثور على الأمر. يجب أن تكون قيمة متغير `PATH` عبارة عن سلسلة من الإدخالات مفصولة بنقطتين. يتكون كل إدخال من اسم دليل. يمكن الإشارة إلى الدليل الحالي ضمنيًا عن طريق اسم دليل فارغ، أو صراحةً عن طريق نقطة واحدة.
حالة الخروج الخاصة بالأمر
لكل أمر حالة خروج يمكن أن تؤثر على سلوك أوامر الصدفة الأخرى. القاعدة هي أن الأمر يخرج بالقيمة صفر للإشارة إلى النجاح أو الاكتمال، وغير الصفر للإشارة إلى الفشل أو الخطأ أو مؤشر خاطئ. يجب أن تشير صفحة الدليل الخاصة بكل أمر إلى رموز الخروج المختلفة وما تعنيه. بالإضافة إلى ذلك، تُرجع الأوامر المضمنة رموز الخروج، وكذلك الدالة المضمنة في الصدفة التي يتم تنفيذها.
إذا كان الأمر يتكون بالكامل من مهام تعيين متغيرات، فإن حالة الخروج من الأمر هي حالة الخروج من آخر بديل للأمر، إن وجد، وإلا فإنها تكون 0.
الأوامر المعقدة
الأوامر المعقدة هي مجموعات من الأوامر البسيطة مع عوامل التحكم أو الكلمات المحجوزة، مما يخلق أمرًا معقدًا أكبر. بشكل عام، الأمر هو أحد ما يلي:
أمر بسيط
خط أنابيب
قائمة أو قائمة مركبة
أمر مركب
تعريف دالة
إلا إذا ذكر خلاف ذلك، فإن حالة خروج الأمر هي حالة الخروج من آخر أمر بسيط تم تنفيذه بواسطة الأمر.
خطوط الأنابيب
خط الأنابيب هو تسلسل من أمر واحد أو أكثر مفصولة بعامل التحكم |. يتم توصيل المخرجات القياسية لجميع الأوامر باستثناء الأمر الأخير بالإدخال القياسي للأمر التالي. يتم تمرير المخرجات القياسية للأمر الأخير من الصدفة، كما هو الحال دائمًا.
صيغة خط الأنابيب هي:
[!] الأمر 1 [| الأمر 2 ...]
يتم توصيل المخرجات القياسية للأمر 1 بالإدخال القياسي للأمر 2. يُعتبر الإدخال القياسي أو المخرجات القياسية أو كلاهما لأي أمر مُعيّن بواسطة خط الأنابيب قبل أي إعادة توجيه محددة بواسطة عوامل إعادة التوجيه التي هي جزء من الأمر.
إذا لم يكن خط الأنابيب في الخلفية (سيتم مناقشته لاحقًا)، فإن الصدفة تنتظر حتى تكتمل جميع الأوامر.
إذا تم تمكين خيار pipefail عند بدء تشغيل الصدفة لخط الأنابيب، فإن حالة الخروج من خط الأنابيب هي حالة الخروج من آخر أمر تم تحديده في خط الأنابيب الذي خرج بحالة غير صفرية، أو صفر إذا خرجت جميع الأوامر في خط الأنابيب بحالة صفر. إذا لم يتم تمكين خيار pipefail، فإن حالة الخروج من خط الأنابيب هي حالة الخروج من آخر أمر تم تحديده في خط الأنابيب؛ لا يتم استخدام حالات الخروج لأي أوامر أخرى. إذا سبقت الكلمة المحجوزة ! خط الأنابيب، فإن حالة الخروج منه هي النفي المنطقي لحالة الخروج الموصوفة أعلاه.
نظرًا لأن تعيين خط الأنابيب للإدخال القياسي أو المخرجات القياسية أو كلاهما يحدث قبل إعادة التوجيه، فيمكن تعديله عن طريق إعادة التوجيه. على سبيل المثال:
$ الأمر 1 2>&1 | الأمر 2
يرسل كل من المخرجات القياسية والخطأ القياسي للأمر 1 إلى الإدخال القياسي للأمر 2.
يؤدي مُنهي `;` أو `<سطر جديد>` إلى تنفيذ قائمة `AND-OR` التي تسبقها بالتسلسل؛ ويؤدي `&` إلى تنفيذ غير متزامن لقائمة `AND-OR` التي تسبقها.
لاحظ أنه على عكس بعض الأصداف الأخرى، فإن كل عملية في خط الأنابيب هي عملية فرعية من الصدفة التي استدعتها (إلا إذا كان برنامجًا مدمجًا في الصدفة، وفي هذه الحالة يتم تنفيذه في الصدفة الحالية - ولكن أي تأثير له على البيئة يتم مسحه).
الأوامر في الخلفية - &
إذا انتهى الأمر بعامل التحكم &، فإن الصدفة تنفذ الأمر بشكل غير متزامن - أي أن الصدفة لا تنتظر حتى ينتهي الأمر قبل تنفيذ الأمر التالي.
صيغة تشغيل أمر في الخلفية هي:
command1 & [command2 & ...]
إذا لم يكن الصدفة تفاعلية، يتم تعيين المدخل القياسي للأمر غير المتزامن إلى /dev/null.
القوائم - بشكل عام
القائمة هي سلسلة من صفر أو أكثر من الأوامر مفصولة بأسطر جديدة أو فواصل منقوطة أو علامات العطف، وتنتهي اختياريًا بأحد هذه الأحرف الثلاثة. يتم تنفيذ الأوامر في القائمة بالترتيب الذي كتبت به. إذا تبع الأمر علامة العطف، فسيقوم الصدفة ببدء الأمر ثم الانتقال فورًا إلى الأمر التالي؛ وإلا فإنه ينتظر حتى ينتهي الأمر قبل المتابعة إلى الأمر التالي.
عوامل التشغيل المنطقية للقوائم
^ & و || هما عوامل تشغيل منطقية للقوائم. && ينفذ الأمر الأول، ثم ينفذ الأمر الثاني فقط إذا كان رمز الخروج للأمر الأول هو صفر. || مشابه، ولكنه ينفذ الأمر الثاني فقط إذا كان رمز الخروج للأمر الأول غير صفري. && و || لهما نفس الأولوية.
هياكل التحكم في التدفق - if و while و for و case
صيغة الأمر if هي:
if قائمة
then قائمة
[ elif قائمة
then قائمة ] ...
[ else قائمة ]
fi
صيغة الأمر while هي:
while قائمة
do قائمة
done
يتم تنفيذ القائمتين بشكل متكرر طالما أن رمز الخروج للقائمة الأولى هو صفر. الأمر until مشابه، ولكن بدلاً من while، يستخدم الكلمة until، مما يتسبب في تكراره حتى يصبح رمز الخروج للقائمة الأولى صفرًا.
صيغة الأمر for هي:
for متغير [ in [ كلمة ... ] ]
do قائمة
done
يتم توسيع الكلمات التي تلي in، ثم يتم تنفيذ القائمة بشكل متكرر مع تعيين المتغير لكل كلمة على التوالي. حذف in كلمة ... يعادل in "$@".
صيغة الأمرين break و continue هي:
break [ رقم ]
continue [ رقم ]
يوقف break الحلقة الداخلية for أو while ذات الرقم المحدد. continue يستمر في التكرار التالي للحلقة الداخلية. يتم تنفيذ هذه الأوامر كأوامر مدمجة.
صيغة الأمر case هي:
case كلمة in
[(]نمط) قائمة ;;
...
esac
يمكن أن يكون النمط في الواقع نمطًا واحدًا أو أكثر (انظر "أنماط الصدفة" الموصوفة لاحقًا)، مفصولة بأحرف |. الحرف ( الذي يسبق النمط اختياري.
تجميع الأوامر معًا
يمكن تجميع الأوامر عن طريق كتابة إما:
(قائمة)
أو
{ قائمة; }
ينفذ الأول هذه الأوامر في صدفة فرعية. لن تؤثر الأوامر المدمجة المجمعة في (قائمة) على الصدفة الحالية. الشكل الثاني لا يفرع صدفة أخرى، لذلك فهو أكثر كفاءة. يسمح تجميع الأوامر معًا بهذه الطريقة بإعادة توجيه إخراجها كما لو كانت برنامجًا واحدًا:
{ printf " hello " ; printf " world\n" ; } > greeting
لاحظ أنه يجب أن يتبع } عامل تشغيل تحكم (هنا، ;) بحيث يتم التعرف عليه على أنه كلمة محجوزة وليس وسيطة أمر أخرى.
الدوال
صيغة تعريف الدالة هي:
name () أمر
تعريف الدالة هو عبارة قابلة للتنفيذ؛ عند تنفيذها، تقوم بتثبيت دالة باسم name وإرجاع رمز خروج صفر. الأمر عادة ما يكون قائمة محاطة بأقواس { و }.
يمكن الإعلان عن المتغيرات لتكون محلية للدالة باستخدام الأمر local. يجب أن يظهر هذا
كأول عبارة في الدالة، والصيغة هي:
local [متغير | -] ...
يتم تنفيذ local كأمر مدمج.
عندما يتم جعل متغير محليًا، فإنه يرث القيمة الأولية وعلامات التصدير والقراءة فقط من
المتغير الذي يحمل نفس الاسم في النطاق المحيط، إذا كان موجودًا. وإلا، يتم تعيين المتغير في البداية على أنه غير مُعيّن. تستخدم الصدفة النطاق الديناميكي، بحيث إذا جعلت المتغير x محليًا للدالة f، والتي بدورها تستدعي الدالة g، فإن المراجع إلى المتغير x التي تتم داخل g
ستشير إلى المتغير x المعلن داخل f، وليس إلى المتغير العام الذي يحمل الاسم x.
البارامتر الخاص الوحيد الذي يمكن جعله محليًا هو "-". جعل أي خيارات الصدفة المحلية التي يتم تغييرها عبر الأمر set داخل الدالة ليتم استعادتها إلى قيمها الأصلية
عندما تعود الدالة.
صيغة الأمر return هي:
return [رمز الخروج]
يقوم بإنهاء الدالة التي يتم تنفيذها حاليًا. يتم تنفيذ return كأمر مدمج.
المتغيرات والبارامترات
تحافظ الصدفة على مجموعة من البارامترات. يسمى البارامتر الذي يتم تحديده باسم متغير. عند بدء التشغيل، تقوم الصدفة بتحويل جميع متغيرات البيئة إلى متغيرات الصدفة. يمكن تعيين متغيرات جديدة باستخدام الصيغة:
name=value
يجب أن يتكون اسم المتغيرات التي يتم تعيينها بواسطة المستخدم من الأحرف الأبجدية والأرقام والشرطات السفلية فقط - بحيث يجب أن يكون أولها حرفًا أبجديًا. يمكن أيضًا الإشارة إلى بارامتر باستخدام رقم أو حرف خاص كما هو موضح أدناه.
البارامترات الموضعية
البارامتر الموضعي هو بارامتر يتم تحديده برقم (n > 0). تقوم الصدفة بتعيين هذه القيم في البداية إلى قيم وسيطات سطر الأوامر التي تتبع اسم برنامج الصدفة النصي. يمكن أيضًا استخدام الأمر `set` لتعيينها أو إعادة تعيينها.
البارامترات الخاصة
البارامتر الخاص هو بارامتر يتم تحديده بأحد الأحرف الخاصة التالية. يتم سرد قيمة
البارامتر بجانب الحرف الخاص به.
* يتوسع إلى البارامترات الموضعية، بدءًا من واحد. عند حدوث التوسع
داخل سلسلة محاطة بعلامات اقتباس مزدوجة، فإنه يتوسع إلى حقل واحد بقيمة كل
بارامتر مفصولًا بأول حرف من متغير `IFS`، أو بمسافة ⟨ ⟩ إذا كان
`IFS` غير مُعيّن.
@ يتوسع إلى البارامترات الموضعية، بدءًا من واحد. عند حدوث التوسع
داخل علامات اقتباس مزدوجة، يتوسع كل بارامتر موضعي كحجة منفصلة. إذا
لم تكن هناك بارامترات موضعية، فإن توسيع `@` ينتج عنه صفر من الحجج،
حتى عندما يكون `@` محاطًا بعلامات اقتباس مزدوجة. ما يعنيه هذا بشكل أساسي، على سبيل المثال، إذا كان `$1` هو
"abc" و `$2` هو "def ghi"، فإن `"$@"` يتوسع إلى حجتين:
"abc" "def ghi"
# يتوسع إلى عدد البارامترات الموضعية.
؟ يتوسع إلى حالة الخروج لأحدث سلسلة أوامر.
- (الواصلة). يتوسع إلى علامات الخيارات الحالية (أسماء الخيارات المكونة من حرف واحد، متسلسلة في سلسلة) كما هو محدد عند الاستدعاء، بواسطة الأمر `set`، أو بشكل ضمني بواسطة الصدفة.
$ يتوسع إلى مُعرّف العملية للصدفة التي تم استدعاؤها. تحتفظ الصدفة الفرعية بنفس قيمة $ الخاصة بالصدفة الرئيسية.
! يتوسع إلى مُعرّف العملية لأحدث أمر تم تنفيذه في الخلفية من الصدفة الحالية. بالنسبة لسلسلة أوامر، يكون مُعرّف العملية هو مُعرّف العملية للأمر الأخير في سلسلة الأوامر.
0 (صفر). يتوسع إلى اسم الصدفة أو نص البرنامج النصي للصدفة.
توسيعات الكلمات
يصف هذا الجزء التوسيعات المختلفة التي يتم تطبيقها على الكلمات. لا يتم تطبيق جميع التوسيعات على كل كلمة، كما هو موضح لاحقًا.
توسيعات التيْلْدَة، وتوسيعات المعلمات، واستبدالات الأوامر، والتوسيعات الحسابية، وإزالة علامات الاقتباس التي تحدث داخل كلمة واحدة، تتوسع إلى حقل واحد. فقط تقسيم الحقول أو توسيع المسار يمكن أن ينشئ حقولًا متعددة من كلمة واحدة. الاستثناء الوحيد لهذه القاعدة هو توسيع المعلمة الخاصة @ داخل علامات الاقتباس المزدوجة، كما هو موضح أعلاه.
ترتيب توسيع الكلمات هو:
توسيع التيْلْدَة، وتوسيع المعلمات، واستبدال الأوامر، والتوسيعات الحسابية (تحدث جميعها في نفس الوقت).
يتم إجراء تقسيم الحقول على الحقول التي تم إنشاؤها في الخطوة (1) ما لم يكن متغير `IFS` فارغًا.
توسيع المسار (إلا إذا كان الأمر `set -f` قيد التنفيذ).
إزالة علامات الاقتباس.
يُستخدم الحرف $ لتقديم توسيع المعلمات، أو استبدال الأوامر، أو التقييم الحسابي.
توسيع التيْلْدَة (استبدال دليل المستخدم الرئيسي)
تخضع الكلمة التي تبدأ بحرف التيْلْدَة غير المُقتبس (~) لتوسيع التيْلْدَة. يتم التعامل مع جميع الأحرف حتى الشرطة المائلة (/) أو نهاية الكلمة كاسم مستخدم ويتم استبدالها بدليل المستخدم الرئيسي. إذا كان اسم المستخدم مفقودًا (كما في ~/foobar)، يتم استبدال التيْلْدَة بقيمة متغير HOME (دليل المستخدم الرئيسي الحالي).
توسيع المعلمات
صيغة توسيع المعلمات هي كما يلي:
${expression}
حيث تتكون expression من جميع الأحرف حتى "}" المطابقة. أي "}" يتم إلغاؤها باستخدام شرطة مائلة عكسية أو داخل سلسلة مقتبسة، والأحرف الموجودة في التوسيعات الحسابية المضمنة، واستبدالات الأوامر، وتوسيعات المتغيرات، لا يتم فحصها في تحديد "}" المطابقة.
أبسط شكل لتوسيع المعلمات هو:
${parameter}
يتم استبدال قيمة parameter، إن وجدت.
يمكن إحاطة اسم المعلمة أو الرمز بأقواس متعرجة، وهي اختيارية باستثناء المعلمات الموضعية التي تحتوي على أكثر من رقم واحد أو عندما يتبع المعلمة حرف يمكن تفسيره على أنه جزء من الاسم. إذا حدث توسيع المعلمات داخل علامات الاقتباس المزدوجة:
لا يتم إجراء توسيع المسار على نتائج التوسيع.
لا يتم إجراء تقسيم الحقول على نتائج التوسيع، باستثناء @.
بالإضافة إلى ذلك، يمكن تعديل توسيع المعلمة باستخدام أحد التنسيقات التالية.
${parameter:-word} استخدام القيم الافتراضية. إذا كانت المعلمة غير معرّفة أو فارغة، يتم استبدال توسيع الكلمة؛ وإلا، يتم استبدال قيمة المعلمة.
${parameter:=word} تعيين القيم الافتراضية. إذا كانت المعلمة غير معرّفة أو فارغة، يتم تعيين توسيع الكلمة إلى المعلمة. في جميع الحالات، يتم استبدال القيمة النهائية للمعلمة. لا يمكن تعيين سوى المتغيرات، وليس المعلمات الموضعية أو المعلمات الخاصة، بهذه الطريقة.
${parameter:?[word]} الإشارة إلى خطأ إذا كانت فارغة أو غير معرّفة. إذا كانت المعلمة غير معرّفة أو فارغة، يتم كتابة توسيع الكلمة (أو رسالة تشير إلى أنها غير معرّفة إذا تم حذف الكلمة) إلى الخطأ القياسي ويخرج الصدفة بحالة خروج غير صفرية. وإلا، يتم استبدال قيمة المعلمة. لا يتعين على الصدفة التفاعلية الخروج.
${parameter:+word} استخدام قيمة بديلة. إذا كانت المعلمة غير معرّفة أو فارغة، يتم استبدال قيمة فارغة؛ وإلا، يتم استبدال توسيع الكلمة.
في توسعات المعلمات الموضحة سابقًا، يؤدي استخدام النقطتين في التنسيق إلى اختبار معلمة غير معرّفة أو فارغة؛ يؤدي حذف النقطتين إلى اختبار معلمة غير معرّفة فقط.
${#parameter} طول السلسلة. طول الأحرف لقيمة المعلمة.
توفر أنواع توسيع المعلمات الأربعة التالية معالجة السلاسل الفرعية. في كل حالة، يتم استخدام ترميز مطابقة النماذج (انظر "أنماط الصدفة")، بدلاً من ترميز التعبير العادي، لتقييم الأنماط. إذا كانت المعلمة هي * أو @، فإن نتيجة التوسيع غير محددة. إن إحاطة سلسلة توسيع المعلمات الكاملة بعلامات اقتباس مزدوجة لا تتسبب في اقتباس أحرف النمط الأربعة التالية، في حين أن الاقتباس داخل الأقواس له هذا التأثير.
${parameter%word} إزالة أصغر لاحقة نمط. يتم توسيع الكلمة لإنتاج نمط. ينتج عن توسيع المعلمة المعلمة، مع حذف أصغر جزء من اللاحقة التي يطابقها النمط.
${parameter%%word} إزالة أكبر لاحقة نمط. يتم توسيع الكلمة لإنتاج نمط. ينتج عن توسيع المعلمة المعلمة، مع حذف أكبر جزء من اللاحقة التي يطابقها النمط.
${parameter#word} إزالة أصغر بادئة نمط. يتم توسيع الكلمة لإنتاج نمط. ينتج عن توسيع المعلمة المعلمة، مع حذف أصغر جزء من البادئة التي يطابقها النمط.
${parameter##word} إزالة أكبر بادئة نمط. يتم توسيع الكلمة لإنتاج نمط. ينتج عن توسيع المعلمة المعلمة، مع حذف أكبر جزء من البادئة التي يطابقها النمط.
استبدال الأوامر
يسمح استبدال الأوامر باستبدال ناتج أمر في مكان اسم الأمر نفسه. يحدث استبدال الأوامر عندما يتم تضمين الأمر كما يلي:
$(command)
أو ("إصدار محاط بعلامات اقتباس معكوسة"):
`command`
يقوم الصدفة بتوسيع استبدال الأمر عن طريق تنفيذ الأمر في بيئة صدفة فرعية واستبدال استبدال الأمر بالمخرجات القياسية للأمر، مع إزالة تسلسلات من سطر واحد أو أكثر من الأسطر الجديدة في نهاية الاستبدال. (لا تتم إزالة الأسطر الجديدة المضمنة قبل نهاية المخرجات؛ ومع ذلك، أثناء تقسيم الحقول، قد يتم تحويلها إلى مسافات، اعتمادًا على قيمة IFS وعلامات الاقتباس المستخدمة).
التوسع الحسابي
يوفر التوسع الحسابي آلية لتقييم تعبير حسابي واستبدال قيمته. صيغة التوسع الحسابي هي كما يلي:
$((expression))
يتم التعامل مع التعبير كما لو كان محاطًا بعلامات اقتباس مزدوجة، باستثناء أن علامة الاقتباس المزدوجة داخل التعبير لا يتم التعامل معها بشكل خاص. تقوم الصدفة بتوسيع جميع الرموز في التعبير لتوسيع المعلمات، واستبدال الأوامر، وإزالة علامات الاقتباس.
بعد ذلك، تتعامل الصدفة مع هذا على أنه تعبير حسابي وتستبدل قيمة التعبير.
تقسيم المسافات البيضاء (تقسيم الحقول)
بعد توسيع المعلمات، واستبدال الأوامر، والتوسع الحسابي، تقوم الصدفة بفحص نتائج التوسعات والاستبدالات التي لم تحدث داخل علامات الاقتباس المزدوجة لتقسيم الحقول، ويمكن أن ينتج عن ذلك حقول متعددة.
تتعامل الصدفة مع كل حرف من أحرف IFS كفاصل وتستخدم الفواصل لتقسيم
نتائج توسيع المعلمات واستبدال الأوامر إلى حقول.
توسيع اسم المسار (توليد اسم الملف)
ما لم يتم تعيين العلامة -f، يتم إجراء توليد اسم الملف بعد اكتمال تقسيم الكلمات.
يتم اعتبار كل كلمة سلسلة من الأنماط، مفصولة بشرطة مائلة. عملية التوسيع تستبدل الكلمة بأسماء جميع الملفات الموجودة التي يمكن تكوينها عن طريق استبدال كل
نمط بسلسلة تطابق النمط المحدد. هناك قيودان على هذا:
أولاً، لا يمكن أن يطابق النمط سلسلة تحتوي على شرطة مائلة، وثانيًا، لا يمكن أن يطابق النمط سلسلة
تبدأ بنقطة ما لم يكن الحرف الأول من النمط نقطة. يصف القسم التالي الأنماط المستخدمة لكل من توسيع اسم المسار وأمر case.
أنماط الصدفة
يتكون النمط من أحرف عادية، والتي تطابق نفسها، والأحرف الوصفية. الأحرف الوصفية هي "!" و "*" و "?" و "[". تفقد هذه الأحرف معانيها الخاصة إذا كانت
محاطة بعلامات اقتباس. عند إجراء استبدال الأوامر أو المتغيرات، وإذا لم يتم وضع علامة الدولار أو علامات الاقتباس المعكوسة
داخل علامات اقتباس مزدوجة، يتم فحص قيمة المتغير أو مخرجات الأمر بحثًا عن
هذه الأحرف ويتم تحويلها إلى أحرف وصفية.
النجمة ("*") تطابق أي سلسلة من الأحرف. علامة الاستفهام تطابق أي حرف واحد. القوس المربع الأيسر ("[") يقدم فئة الأحرف. يتم الإشارة إلى نهاية فئة الأحرف بواسطة ("]"). إذا كان "]" مفقودًا، فإن "[" يطابق "[" بدلاً من تقديم فئة أحرف. تطابق فئة الأحرف أيًا من الأحرف الموجودة بين الأقواس المربعة. يمكن تحديد نطاق من الأحرف باستخدام علامة ناقص. يمكن استكمال فئة الأحرف عن طريق جعل علامة التعجب هي الحرف الأول من فئة الأحرف.
لتضمين "]" في فئة الأحرف، اجعلها أول حرف مدرج (بعد "!"، إن وجد). لتضمين علامة الطرح، اجعلها أول أو آخر حرف مدرج.
الأوامر المضمنة
يسرد هذا القسم الأوامر المضمنة، وهي مضمنة لأنها تحتاج إلى إجراء عملية لا يمكن إجراؤها بواسطة عملية منفصلة. بالإضافة إلى هذه، هناك العديد من الأوامر الأخرى التي قد تكون مضمنة لتحسين الكفاءة (مثل printf(1)، و echo(1)، و test(1)، إلخ).
:
true أمر فارغ يُرجع قيمة خروج 0 (صحيح).
false أمر فارغ يُرجع قيمة خروج 1 (خطأ).
. file تُقرأ الأوامر الموجودة في الملف المحدد وتُنفذ بواسطة الصدفة.
alias [name[=string ...]] إذا تم تحديد name=string، فإن الصدفة تُعرّف الاسم المستعار name بالقيمة string. إذا تم تحديد name فقط، فسيتم طباعة قيمة الاسم المستعار. بدون وسيطات، تطبع الأمر alias المضمن أسماء وقيم جميع الأسماء المستعارة المعرفة (انظر unalias).
bg [job] ... استمر في تنفيذ الوظائف المحددة (أو الوظيفة الحالية إذا لم يتم إعطاء أي وظائف) في الخلفية.
command [-p] [-v] [-V] command [arg ...] قم بتنفيذ الأمر المحدد مع تجاهل وظائف الصدفة عند البحث عنه. (هذا مفيد عندما يكون لديك وظيفة صدفة بنفس اسم أمر مضمن).
-p ابحث عن الأمر باستخدام PATH الذي يضمن العثور على جميع الأدوات القياسية.
-V لا تقم بتنفيذ الأمر ولكن ابحث عن الأمر واطبع دقة البحث عن الأمر. هذا هو نفسه الأمر type المضمن.
-v لا تقم بتنفيذ الأمر ولكن ابحث عن الأمر واطبع المسار المطلق للأدوات، أو الاسم للأوامر المضمنة، أو توسيع الأسماء المستعارة.
cd|chdir cd|chdir [-LP] [directory] انتقل إلى الدليل المحدد (افتراضيًا HOME). إذا ظهر إدخال لـ CDPATH في بيئة أمر cd أو تم تعيين متغير الصدفة CDPATH، ولم يبدأ اسم الدليل بشرطة مائلة، فسيتم البحث في الدلائل المدرجة في CDPATH عن الدليل المحدد. يكون تنسيق CDPATH هو نفسه تنسيق PATH. إذا تم تحديد شرطة واحدة كـ وسيطة، فسيتم استبدالها بقيمة OLDPWD. سيطبع الأمر cd اسم الدليل الذي انتقل إليه بالفعل إذا كان مختلفًا عن الاسم الذي أعطاه المستخدم. قد يكون هذا مختلفًا إما لأن آلية CDPATH قد تم استخدامها أو لأن الوسيطة عبارة عن شرطة واحدة. يتسبب الخيار -P في استخدام هيكل الدليل الفعلي، أي يتم حل جميع الروابط الرمزية إلى قيمها. يقوم الخيار -L بإلغاء تأثير أي خيارات -P سابقة.
echo [-n] args...
يطبع الوسائط على الإخراج القياسي، مفصولة بمسافات. ما لم يتم تحديد الخيار -n، يتم إخراج سطر جديد بعد الوسائط.
إذا تمت مواجهة أي من التسلسلات التالية من الأحرف أثناء الإخراج، فلن يتم إخراج التسلسل. بدلاً من ذلك، يتم تنفيذ الإجراء المحدد:
\b يتم إخراج حرف مسافة للخلف.
\c يتم منع الإخراج اللاحق. يتم استخدامه عادةً في نهاية الوسيطة الأخيرة لمنع سطر النهاية الذي سيخرجه الأمر echo.
\e يخرج حرف هروب (ESC).
\f يخرج تغذية نموذج.
\n يخرج حرف سطر جديد.
\r يخرج إرجاع سطر.
\t يخرج (أفقيًا) حرف علامة تبويب.
\v يخرج علامة تبويب رأسية.
\0digits
يخرج الحرف الذي تحدده قيمة تتراوح من صفر إلى ثلاثة أرقام ثمانية. إذا لم تكن هناك أرقام، يتم إخراج حرف فارغ.
\\ يخرج شرطة مائلة للخلف.
تؤدي جميع تسلسلات الشرطة المائلة للخلف الأخرى إلى سلوك غير محدد.
eval string ...
يربط جميع الوسائط بمسافات. ثم يعيد تحليل وتنفيذ الأمر.
exec [command arg ...]
ما لم يتم تحديد الأمر، يتم استبدال عملية shell بالبرنامج المحدد (والذي يجب أن يكون برنامجًا حقيقيًا، وليس برنامجًا أو دالة shell مدمجة). يتم وضع أي عمليات إعادة توجيه في أمر exec على أنها دائمة، بحيث لا يتم التراجع عنها عند انتهاء أمر exec.
exit [exitstatus]
ينهي عملية shell. إذا تم تحديد exitstatus، فإنه يستخدم كحالة خروج shell؛ وإلا، يتم استخدام حالة خروج الأمر السابق.
export name ...
export -p
يتم تصدير الأسماء المحددة بحيث تظهر في بيئة الأوامر اللاحقة. الطريقة الوحيدة لإلغاء تصدير متغير هي إلغاء تعيينه. يسمح shell بتعيين قيمة متغير في نفس الوقت الذي يتم فيه تصديره عن طريق كتابة
export name=value
بدون وسيطات، يسرد الأمر export أسماء جميع المتغيرات المصدرة. عند تحديد الخيار -p، سيكون الإخراج بتنسيق مناسب للاستخدام غير التفاعلي.
fc [-e editor] [first [last]]
fc -l [-nr] [first [last]]
fc -s [old=new] [first]
يقوم الأمر fc المدمج بإدراج أو تحرير وإعادة تنفيذ الأوامر التي تم إدخالها مسبقًا في shell تفاعلي.
-e editor
استخدم المحرر المحدد بواسطة editor لتحرير الأوامر. سلسلة editor هي اسم أمر، تخضع للبحث عبر متغير PATH. يتم استخدام القيمة الموجودة في متغير FCEDIT كقيمة افتراضية عند عدم تحديد -e. إذا كان FCEDIT فارغًا أو غير معين، يتم استخدام قيمة متغير EDITOR. إذا كان EDITOR فارغًا أو غير معين، يتم استخدام ed(1) كمحرر.
-l (ell)
يسرد الأوامر بدلاً من استدعاء محرر عليها. تتم كتابة الأوامر بالترتيب المحدد بواسطة المعاملين first و last، كما يتأثر بـ -r، مع إضافة رقم الأمر قبل كل أمر.
-n يقوم بإخفاء أرقام الأوامر عند سردها باستخدام الخيار -l.
-r يعكس ترتيب الأوامر المسردة (مع الخيار -l) أو التي يتم تحريرها (بدون الخيارين -l أو -s).
-s يعيد تنفيذ الأمر دون استدعاء محرر.
الأول
الأخير يحدد الأوامر المراد سردها أو تحريرها. يتم تحديد عدد الأوامر السابقة التي يمكن الوصول إليها عن طريق قيمة المتغير HISTSIZE. يجب أن تكون قيمة "الأول" أو "الأخير" أو كليهما أحد القيم التالية:
[+]رقم
رقم موجب يمثل رقم الأمر؛ يمكن عرض أرقام الأوامر باستخدام الخيار -l.
-رقم
رقم سالب يمثل الأمر الذي تم تنفيذه قبل عدد معين من الأوامر. على سبيل المثال، -1 هو الأمر الذي تم تنفيذه مباشرةً.
سلسلة نصية
سلسلة نصية تشير إلى الأمر الذي تم إدخاله مؤخرًا والذي يبدأ بهذه السلسلة. إذا لم يتم تحديد المعامل "old=new" مع الخيار -s، فلا يمكن أن تحتوي السلسلة النصية للمعامل "الأول" على علامة يساوي مدمجة.
المتغيرات البيئية التالية تؤثر على تنفيذ الأمر fc:
FCEDIT اسم المحرر الذي سيتم استخدامه.
HISTSIZE عدد الأوامر السابقة التي يمكن الوصول إليها.
fg [job]
ينقل المهمة المحددة أو المهمة الحالية إلى المقدمة.
getopts optstring var [arg ...]
أمر POSIX getopts، وليس المقصود به الخلط بينه وبين أداة getopt(1) المشتقة من Bell Labs.
يجب أن يكون الوسيطة الأولى عبارة عن سلسلة من الأحرف، يمكن أن يتبع كل منها اختياريًا نقطتين للإشارة إلى أن الخيار يتطلب وسيطة. يتم تعيين المتغير المحدد إلى الخيار الذي تم تحليله.
يقوم الأمر getopts بإهمال أداة getopt(1) القديمة نظرًا لطريقة تعاملها مع الوسائط التي تحتوي على مسافات بيضاء.
يمكن استخدام الأمر المدمج getopts للحصول على الخيارات ووسائطها من قائمة المعلمات. عند استدعائه، يضع الأمر getopts قيمة الخيار التالي من سلسلة الخيارات في قائمة المعلمات في متغير shell المحدد بواسطة var وفهرسه في متغير shell OPTIND. عند استدعاء shell، يتم تهيئة OPTIND إلى 1. لكل خيار يتطلب وسيطة، سيضع الأمر المدمج getopts الوسيطة في متغير shell OPTARG. إذا لم يكن الخيار مسموحًا به في سلسلة الخيارات، فسيتم إلغاء تعيين OPTARG.
افتراضيًا، يتم فحص المتغيرات $1، ...، $n؛ إذا تم تحديد الوسائط، فسيتم تحليلها بدلاً من ذلك.
optstring هي سلسلة من أحرف الخيارات المعترف بها (انظر getopt(3)). إذا تبع حرف نقطتين، فيُتوقع أن يكون للخيار وسيطة قد تكون أو لا تكون مفصولة عنه بمسافة بيضاء. إذا لم يتم العثور على حرف خيار حيث يُتوقع، فسيقوم الأمر getopts بتعيين المتغير var إلى "?"; ثم سيقوم الأمر getopts بإلغاء تعيين OPTARG وكتابة الإخراج إلى الخطأ القياسي. عن طريق تحديد نقطتين كأول حرف في optstring، سيتم تجاهل جميع الأخطاء.
بعد الخيار الأخير، سيعيد الأمر getopts قيمة غير صفرية ويعين var إلى "?".
يوضح مقتطف التعليمات البرمجية التالي كيف يمكن معالجة الوسائط لأمر يمكنه قبول الخيارات [a] و[b]، والخيار [c]، الذي يتطلب وسيطة.
while getopts abc: f
do
case $f in
a | b) flag=$f;;
c) carg=$OPTARG;;
\?) echo $USAGE; exit 1;;
esac
done
shift $((OPTIND - 1))
سيقبل هذا الكود أيًا من الخيارات التالية على أنها متكافئة:
cmd -acarg file file
cmd -a -c arg file file
cmd -carg -a file file
cmd -a -carg -- file file
hash [command ...]
hash -r
يحتفظ النظام بجدول تجزئة يتذكر مواقع الأوامر. بدون أي وسائط، يطبع الأمر hash محتويات هذا الجدول. يتم وضع علامة نجمية (*) على الإدخالات التي لم يتم النظر إليها منذ آخر أمر cd. من الممكن أن تكون هذه الإدخالات غير صالحة.
مع وجود وسائط، يزيل الأمر hash الأوامر المحددة من جدول التجزئة (باستثناء الدوال) ثم يحدد موقعها. يتسبب الخيار -r في أن يقوم الأمر hash بحذف جميع الإدخالات في جدول التجزئة باستثناء الدوال.
jobs [-lp] [job ...]
يعرض حالة جميع المهام، أو المهام المحددة فقط: افتراضيًا، يعرض الأمر رقم المهمة، والحالة الحالية (+/-)، وحالة المهمة، والأمر الذي تم تشغيله. -l: يعرض أيضًا معرف عملية (PID) لقائد المجموعة، ومعرفات العمليات والأوامر الخاصة بأعضاء المجموعة الآخرين. -p: يعرض فقط معرفات عمليات القادة، واحدة في كل سطر.
kill [-s sigspec | -signum | -sigspec] [pid | job ...]
يشبه الأمر kill(1)، ولكن يمكن أيضًا تحديد مهمة. يمكن أن تكون الإشارات عبارة عن أسماء (تتجاهل حالة الأحرف) بدون بادئة SIG أو أرقام عشرية؛ الافتراضي هو TERM.
kill -l [signum | exitstatus]
يعرض أسماء الإشارات المتاحة بدون بادئة SIG. إذا تم تحديد signum، فسيتم عرض اسم الإشارة لهذا الإشارة فقط. إذا تم تحديد exitstatus (أكبر من 128)، فسيتم عرض اسم الإشارة التي تسببت في ذلك فقط.
pwd [-LP]
أمر مدمج يتذكر ما هو الدليل الحالي بدلاً من إعادة حسابه في كل مرة. هذا يجعله أسرع. ومع ذلك، إذا تمت إعادة تسمية الدليل الحالي، فسيستمر الأمر المدمج `pwd` في طباعة الاسم القديم للدليل. يتسبب الخيار `-P` في عرض القيمة الفعلية للدليل الحالي، أي يتم حل جميع الروابط الرمزية إلى قيمها المقابلة. يقوم الخيار `-L` بإيقاف تأثير أي خيارات `-P` سابقة.
read [-p prompt] [-r] variable [...]
يتم طباعة المطالبة إذا تم تحديد الخيار -p وكان الإدخال القياسي عبارة عن طرفية.
ثم تتم قراءة سطر من الإدخال القياسي. يتم حذف السطر الجديد في نهاية السطر، ويتم تقسيم السطر كما هو موضح في القسم الخاص بتقسيم الكلمات، ويتم تعيين الأجزاء إلى المتغيرات بالترتيب. يجب تحديد متغير واحد على الأقل.
إذا كان هناك المزيد من الأجزاء أكثر من المتغيرات، فسيتم تعيين الأجزاء المتبقية (بالإضافة إلى الأحرف الموجودة في IFS التي فصلتها) إلى المتغير الأخير. إذا كان هناك المزيد من المتغيرات أكثر من الأجزاء، فسيتم تعيين المتغيرات المتبقية إلى سلسلة فارغة. يشير الأمر read المدمج إلى النجاح ما لم تتم مصادفة EOF في الإدخال، وفي هذه الحالة يتم إرجاع الفشل.
بشكل افتراضي، ما لم يتم تحديد الخيار -r، يعمل الشرطة المائلة العكسية "\" كحرف إلغاء، مما يتسبب في التعامل مع الحرف التالي بشكل حرفي. إذا تبع الشرطة المائلة العكسية سطر جديد، فسيتم حذف الشرطة المائلة العكسية والسطر الجديد.
readonly name ...
readonly -p
يتم تحديد الأسماء المحددة على أنها للقراءة فقط، بحيث لا يمكن تعديلها أو إلغاء تحديدها لاحقًا. يسمح الصدفة بتعيين قيمة متغير في نفس الوقت الذي يتم فيه تحديده على أنه للقراءة فقط عن طريق الكتابة
readonly name=value
بدون وسائط، يسرد الأمر readonly أسماء جميع المتغيرات للقراءة فقط. عند تحديد الخيار -p، سيتم تنسيق الإخراج بحيث يكون مناسبًا للاستخدام غير التفاعلي.
printf format [value]...
يقوم الأمر printf بتنسيق وطباعة وسيطاته وفقًا لـ format، وهي سلسلة أحرف تحتوي على ثلاثة أنواع من الكائنات: الأحرف العادية، والتي يتم نسخها ببساطة إلى الإخراج القياسي، وتسلسلات إلغاء الأحرف، والتي يتم تحويلها ونسخها إلى الإخراج القياسي، ومواصفات التنسيق، والتي تؤدي كل منها إلى طباعة القيمة التالية.
تُعامل كل قيمة كسلسلة إذا كانت مواصفة التنسيق المقابلة إما b أو c أو s; وإلا فسيتم تقييمها كـ ثابت C، مع الإضافات التالية:
يُسمح بعلامة زائد أو ناقص في البداية.
إذا كان الحرف الأول عبارة عن علامة اقتباس مفردة أو مزدوجة، فإن قيمة البايت التالي.
يتم إعادة استخدام سلسلة التنسيق بقدر ما يلزم حتى يتم استهلاك جميع القيم. يتم تقييم أي مواصفات تنسيق إضافية باستخدام صفر أو السلسلة الفارغة.
تسلسلات إلغاء الأحرف هي في تدوين الشرطة المائلة العكسية كما هو محدد في ANSI X3.159-1989 ("ANSI C89"). الأحرف ومعانيها هي كما يلي:
\a كتابة حرف <bell>.
\b كتابة حرف <backspace>.
\e كتابة حرف <escape> (ESC).
\f كتابة حرف <form-feed>.
\n كتابة حرف <new-line>.
\r كتابة حرف <carriage return>.
\t كتابة حرف <tab>.
\v كتابة حرف <vertical tab>.
\\ كتابة حرف شرطة مائلة عكسية.
\num كتابة حرف 8 بت تكون قيمته ASCII هي الرقم الثماني المكون من 1 أو 2 أو 3 أرقام `num`.
يتم تقديم كل مواصفة تنسيق بواسطة حرف النسبة المئوية ('%'). يتضمن باقي مواصفة التنسيق، بالترتيب التالي:
صفر أو أكثر من العلامات التالية:
# حرف `'#'` يحدد أنه يجب طباعة القيمة في "شكل بديل". بالنسبة لتنسيقات `b` و `c` و `d` و `s`، ليس لهذا الخيار أي تأثير.
بالنسبة لتنسيق o، يتم زيادة دقة الرقم لفرض أن يكون الحرف الأول من سلسلة الإخراج صفرًا. بالنسبة لتنسيق x (أو X)، يتم إضافة السلسلة 0x (أو 0X) إلى النتيجة غير الصفرية. بالنسبة لتنسيقات e و E و f و g و G، ستحتوي النتيجة دائمًا على فاصلة عشرية، حتى إذا لم تتبعها أي أرقام (عادةً، تظهر الفاصلة العشرية فقط في نتائج تلك التنسيقات إذا تبعتها رقم). بالنسبة لتنسيقات g و G، لا تتم إزالة الأصفار الزائدة من النتيجة كما هو الحال بخلاف ذلك.
- علامة ناقص `-` تحدد محاذاة الإخراج إلى اليسار في الحقل المحدد؛
+ حرف `+` يحدد أنه يجب دائمًا وضع علامة قبل الرقم عند استخدام تنسيقات الإشارة.
' ' مسافة تحدد أنه يجب ترك مسافة قبل الرقم الموجب لتنسيق الإشارة. يتجاوز `+` المسافة إذا تم استخدام كليهما؛
0 صفر `0` يشير إلى أنه يجب استخدام التعبئة بالصفر بدلاً من التعبئة بالفراغات. يتجاوز `-` الـ `0` إذا تم استخدام كليهما؛
عرض الحقل: سلسلة أرقام اختيارية تحدد عرض الحقل؛ إذا كانت سلسلة الإخراج تحتوي على عدد أحرف أقل من عرض الحقل، فسيتم تعبئتها بالفراغات على اليسار (أو على اليمين، إذا تم إعطاء مؤشر المحاذاة اليسرى) لملء عرض الحقل (لاحظ أن الصفر في البداية هو علامة، لكن الصفر المضمن هو جزء من عرض الحقل)؛
الدقة:
نقطة اختيارية `.` متبوعة بسلسلة أرقام اختيارية تحدد الدقة التي تحدد عدد الأرقام التي يجب أن تظهر بعد العلامة العشرية، لتنسيقي `e` و `f`، أو الحد الأقصى لعدد البايتات التي يجب طباعتها من سلسلة (تنسيقي `b` و `s`)؛ إذا كانت سلسلة الأرقام مفقودة، فستُعامل الدقة على أنها صفر؛
التنسيق:
حرف يشير إلى نوع التنسيق المراد استخدامه (أحد الأحرف `diouxXfwEgGbcs`).
يمكن أن يكون عرض الحقل أو الدقة عبارة عن `*` بدلاً من سلسلة أرقام. في هذه الحالة، يزود وسيط بعرض الحقل أو الدقة.
تحدد أحرف التنسيق معانيها:
diouXx يتم طباعة الوسيط كعدد عشري مُشار إليه (d أو i)، أو عدد ثماني غير مُشار إليه، أو عدد عشري غير مُشار إليه، أو عدد ست عشري (X أو x)، على التوالي.
f يتم طباعة الوسيط على النمط `[-]ddd.ddd` حيث يكون عدد الأرقام بعد العلامة العشرية مساويًا لمواصفات الدقة للوسيط. إذا كانت الدقة مفقودة، فسيتم إعطاء 6 أرقام؛ إذا تم تحديد الدقة بشكل صريح على أنها 0، فلن تتم طباعة أي أرقام ولا علامة عشرية.
eE يتم طباعة الوسيط على النمط `[-]d.ddde±dd` حيث توجد رقم واحد قبل العلامة العشرية والرقم الذي يليها يساوي مواصفات الدقة للوسيط؛ عندما تكون الدقة مفقودة، يتم إنتاج 6 أرقام. يتم استخدام حرف E كبير لتنسيق 'E'.
gG يتم طباعة الوسيط على النمط `f` أو على النمط `e` (E) أيهما يعطي الدقة الكاملة بأقل مساحة.
b تتم طباعة الأحرف من سلسلة الوسيط مع توسيع تسلسلات الهروب ذات الشرطة المائلة العكسية. يتم دعم تسلسلات الهروب ذات الشرطة المائلة العكسية الإضافية التالية:
\c يتسبب في تجاهل `dash` لأي أحرف متبقية في سلسلة الوسيط التي تحتوي عليها، وأي وسائط سلسلة متبقية، وأي أحرف إضافية في وسيط التنسيق.
\0num كتابة حرف ذي 8 بتات، تكون قيمته ASCII هي العدد الثماني المكون من رقم واحد أو رقمين أو ثلاثة أرقام، وهو الرقم num.
c تتم طباعة الحرف الأول من الوسيطة.
s تتم طباعة الأحرف من السلسلة النصية حتى النهاية أو حتى الوصول إلى عدد البايتات المحدد في مواصفات الدقة؛ إذا تم حذف الدقة، تتم طباعة جميع الأحرف في السلسلة النصية.
% طباعة الرمز `%`؛ لا يتم استخدام أي وسيطة.
في أي حالة، لا يتسبب اتساع الحقل غير الموجود أو الصغير في اقتطاع الحقل؛ يتم إجراء التعبئة فقط إذا كان اتساع الحقل المحدد يتجاوز الاتساع الفعلي.
set [{ -خيارات | +خيارات | -- }] وسيطة ...
يقوم الأمر `set` بثلاث وظائف مختلفة.
بدون وسيطات، يسرد قيم جميع متغيرات الصدفة.
إذا تم تقديم خيارات، فإنه يضبط علامات الخيارات المحددة، أو يزيلها كما هو موضح في قسم "معالجة قائمة الوسائط". في حالة خاصة، إذا كانت الخيار هي `-o` أو `+o` ولم يتم توفير أي وسيطة، فستقوم الصدفة بطباعة إعدادات جميع خياراتها. إذا كان الخيار هو `-o`، فسيتم طباعة الإعدادات بتنسيق قابل للقراءة بواسطة الإنسان؛ إذا كان الخيار هو `+o`، فسيتم طباعة الإعدادات بتنسيق مناسب لإعادة إدخاله إلى الصدفة لإجراء نفس إعدادات الخيارات.
بالإضافة إلى أسماء الخيارات المدرجة في قسم "معالجة قائمة الوسائط"، يمكن تحديد الخيارات التالية كوسيطات للأمر `-o` أو `+o`:
`pipefail` اشتق حالة الخروج من مسار الأوامر من حالات الخروج لجميع الأوامر في المسار، وليس فقط الأمر الأخير، كما هو موضح في قسم "مسارات الأوامر".
الاستخدام الثالث لأمر `set` هو تعيين قيم معلمات الموضع في الصدفة إلى الوسائط المحددة. لتغيير معلمات الموضع دون تغيير أي خيارات، استخدم `--` كأول وسيطة لأمر `set`. إذا لم تكن هناك أي وسيطات، فسيقوم الأمر `set` بمسح جميع معلمات الموضع (وهو ما يعادل تنفيذ `shift $#`).
shift [n]
قم بتحويل معلمات الموضع n مرة. تقوم عملية التحويل بتعيين قيمة `$1` إلى قيمة `$2`، وقيمة `$2` إلى قيمة `$3`، وهكذا، مما يقلل من قيمة `$#` بمقدار واحد. إذا كان `n` أكبر من عدد معلمات الموضع، فسيقوم الأمر `shift` بإصدار رسالة خطأ، والخروج بحالة إرجاع 2.
test تعبير
[ تعبير ]
يقوم الأمر `test` بتقييم التعبير، وإذا كان التعبير صحيحًا، فإنه يُرجع حالة خروج صفر (صحيح)؛ وإلا فإنه يُرجع 1 (خطأ). إذا لم يكن هناك تعبير، فسيقوم الأمر `test` أيضًا بإرجاع 1 (خطأ).
جميع العوامل والعلامات عبارة عن وسيطات منفصلة للأمر `test`.
يتم استخدام العناصر الأولية التالية لإنشاء التعبير:
`-b ملف` صحيح إذا كان الملف موجودًا وهو ملف خاص من نوع الكتلة.
`-c ملف` صحيح إذا كان الملف موجودًا وهو ملف خاص من نوع الحرف.
`-d ملف` صحيح إذا كان الملف موجودًا وهو دليل.
`-e ملف` صحيح إذا كان الملف موجودًا (بغض النظر عن النوع).
`-f ملف` صحيح إذا كان الملف موجودًا وهو ملف عادي.
-g file صحيح إذا كان الملف موجودًا وكانت علامة معرف المجموعة الخاصة به مضبوطة.
-h file صحيح إذا كان الملف موجودًا وكان رابطًا رمزيًا.
-k file صحيح إذا كان الملف موجودًا وكانت بتة "اللزوجة" الخاصة به مضبوطة.
-n string صحيح إذا كان طول السلسلة غير صفري.
-p file صحيح إذا كان الملف أنبوبًا مُسمى (FIFO).
-r file صحيح إذا كان الملف موجودًا وقابلاً للقراءة.
-s file صحيح إذا كان الملف موجودًا وكان حجمه أكبر من صفر.
-t file_descriptor
صحيح إذا كان الملف الذي رقم واصف الملف الخاص به هو file_descriptor مفتوحًا ومرتبطًا بجهاز طرفي.
-u file صحيح إذا كان الملف موجودًا وكانت علامة معرف المستخدم الخاصة به مضبوطة.
-w file صحيح إذا كان الملف موجودًا وقابلاً للكتابة. يشير "صحيح" فقط إلى أن علامة الكتابة قيد التشغيل. الملف غير قابل للكتابة على نظام ملفات للقراءة فقط حتى لو أشار هذا الاختبار إلى "صحيح".
-x file صحيح إذا كان الملف موجودًا وقابلاً للتنفيذ. يشير "صحيح" فقط إلى أن علامة التنفيذ قيد التشغيل. إذا كان الملف دليلًا، فإن "صحيح" يشير إلى أنه يمكن البحث في الملف.
-z string صحيح إذا كان طول السلسلة صفرًا.
-L file صحيح إذا كان الملف موجودًا وكان رابطًا رمزيًا. يتم الاحتفاظ بهذا المشغل من أجل التوافق مع الإصدارات السابقة من هذا البرنامج. لا تعتمد على وجوده؛ استخدم -h بدلاً من ذلك.
-O file صحيح إذا كان الملف موجودًا وكان مالكه يطابق معرف المستخدم الفعلي لهذه العملية.
-G file صحيح إذا كان الملف موجودًا وكانت مجموعته تطابق معرف المجموعة الفعلي لهذه العملية.
-S file صحيح إذا كان الملف موجودًا وكان مقبسًا.
file1 -nt file2
صحيح إذا كان كل من file1 و file2 موجودين وكان file1 أحدث من file2، أو إذا كان file1 موجودًا ولكن file2 غير موجود.
file1 -ot file2
صحيح إذا كان كل من file1 و file2 موجودين وكان file1 أقدم من file2، أو إذا كان file2 موجودًا ولكن file1 غير موجود.
file1 -ef file2
صحيح إذا كان كل من file1 و file2 موجودين ويشيران إلى نفس الملف.
string صحيح إذا كانت السلسلة ليست سلسلة فارغة.
s1 = s2 صحيح إذا كانت السلاسل s1 و s2 متطابقتين.
s1 != s2 صحيح إذا كانت السلاسل s1 و s2 غير متطابقتين.
s1 < s2 صحيح إذا جاءت السلسلة s1 قبل s2 بناءً على القيمة الـ ASCII لأحرفها.
s1 > s2 صحيح إذا جاءت السلسلة s1 بعد s2 بناءً على القيمة الـ ASCII لأحرفها.
n1 -eq n2 صحيح إذا كان كل من العددين الصحيحين n1 و n2 متساويين جبريًا.
n1 -ne n2 صحيح إذا كان كل من العددين الصحيحين n1 و n2 غير متساويين جبريًا.
n1 -gt n2 صحيح إذا كان العدد الصحيح n1 أكبر جبريًا من العدد الصحيح n2.
n1 -ge n2 صحيح إذا كان العدد الصحيح n1 أكبر من أو يساوي جبريًا العدد الصحيح n2.
n1 -lt n2 صحيح إذا كان العدد الصحيح n1 أصغر جبريًا من العدد الصحيح n2.
n1 -le n2 صحيح إذا كان العدد الصحيح n1 أصغر من أو يساوي جبريًا العدد الصحيح n2.
يمكن دمج هذه العمليات الأولية مع العمليات التالية:
! expression صحيح إذا كان التعبير خاطئًا.
expression1 -a expression2
صحيح إذا كان كل من expression1 و expression2 صحيحين.
expression1 -o expression2
صحيح إذا كان أي من expression1 أو expression2 صحيحًا.
(تعبير) صحيح إذا كان التعبير صحيحًا.
عامل التشغيل -a له أولوية أعلى من عامل التشغيل -o.
times اطبع إجمالي أوقات المستخدم والنظام للصدفة وللعمليات التي يتم تشغيلها من الصدفة. حالة الإرجاع هي 0.
trap [الإجراء إشارة...]
تسبب الصدفة في تحليل وتنفيذ الإجراء عند استلام أي من الإشارات المحددة. يتم تحديد الإشارات عن طريق رقم الإشارة أو عن طريق اسم الإشارة. إذا كانت الإشارة هي 0 أو EXIT، فسيتم تنفيذ الإجراء عند خروج الصدفة. يمكن أن يكون الإجراء فارغًا ('')، مما يتسبب في تجاهل الإشارات المحددة. عند حذف الإجراء أو تعيينه على -، يتم تعيين الإشارات المحددة إلى الإجراء الافتراضي. عند قيام الصدفة بإنشاء صدفة فرعية، فإنها تعيد تعيين الإشارات التي تم اعتراضها (ولكن ليس تجاهلها) إلى الإجراء الافتراضي. لا يكون لأمر trap أي تأثير على الإشارات التي تم تجاهلها عند الدخول إلى الصدفة. يؤدي أمر trap بدون أي وسائط إلى كتابة قائمة بالإشارات والإجراء المرتبط بها إلى الإخراج القياسي بتنسيق مناسب كمدخل للصدفة التي تحقق نفس نتائج الاعتراض.
أمثلة:
trap
اعرض الإشارات التي تم اعتراضها والإجراء المقابل لها
trap '' INT QUIT tstp 30
تجاهل الإشارات INT QUIT TSTP USR1
trap date INT
اطبع التاريخ عند استلام الإشارة INT
type [اسم...]
فسّر كل اسم كأمر واطبع دقة بحث الأمر. الاحتمالات هي: كلمة رئيسية للصدفة، اسم مستعار، أمر مضمن في الصدفة، أمر، اسم مستعار مُتتبع، وغير موجود. بالنسبة للأسماء المستعارة، تتم طباعة توسيع الاسم المستعار؛ بالنسبة للأوامر والأسماء المستعارة المُتتبعة، تتم طباعة المسار الكامل للأمر.
ulimit [-H | -S] [-a | -tfdscmlpnvwr [قيمة]]
استعلم عن أو قم بتعيين الحدود القصوى أو اللينة على العمليات أو قم بتعيين حدود جديدة. يتم تحديد الاختيار بين الحد الأقصى (الذي لا يُسمح لأي عملية بانتهاكه، والذي قد لا يتم رفعه بعد خفضه) والحد اللين (الذي يتسبب في إرسال إشارة إلى العمليات ولكن ليس بالضرورة قتلها، والذي يمكن رفعه) باستخدام هذه العلامات:
-H قم بتعيين أو الاستعلام عن الحدود القصوى
-S قم بتعيين أو الاستعلام عن الحدود اللينة. إذا لم يتم تحديد أي من -H أو -S، يتم عرض الحد اللين أو يتم تعيين كلا الحدين. إذا تم تحديد كليهما، فإن الأخير هو الذي يسود.
يتم بعد ذلك تحديد الحد المطلوب الاستعلام عنه أو تعيينه عن طريق تحديد أي من هذه العلامات:
-a اعرض جميع الحدود الحالية
-t اعرض أو قم بتعيين الحد الزمني لوحدة المعالجة المركزية (بالثواني)
-f اعرض أو قم بتعيين الحد الأقصى لحجم الملف الذي يمكن إنشاؤه (بمقدار 512 بايت)
-d اعرض أو قم بتعيين الحد الأقصى لحجم قسم البيانات للعملية (بالكيلوبايت)
-s اعرض أو قم بتعيين الحد الأقصى لحجم مكدس العملية (بالكيلوبايت)
-c اعرض أو قم بتعيين الحد الأقصى لحجم ملف التفريغ الأساسي الذي يمكن إنتاجه (بمقدار 512 بايت)
-m اعرض أو قم بتعيين الحد الأقصى لإجمالي الذاكرة الفعلية التي يمكن أن تكون قيد الاستخدام بواسطة عملية (بالكيلوبايت)
-l اعرض أو قم بتعيين الحد الأقصى للمقدار الذي يمكن للعملية قفله باستخدام mlock(2) (بالكيلوبايت)
-p عرض أو تحديد الحد الأقصى لعدد العمليات التي يمكن للمستخدم تشغيلها في وقت واحد.
-n عرض أو تحديد الحد الأقصى لعدد الملفات التي يمكن للعملية فتحها في وقت واحد.
-v عرض أو تحديد الحد الأقصى لإجمالي الذاكرة الظاهرية التي يمكن أن تكون قيد الاستخدام بواسطة عملية (بالكيلوبايت).
-w عرض أو تحديد الحد الأقصى لعدد التأمين (locks) التي يمكن أن تحتفظ بها عملية.
-r عرض أو تحديد الحد الأقصى لأولوية الجدولة في الوقت الفعلي لعملية.
إذا لم يتم تحديد أي من هذه الخيارات، فسيتم عرض أو تحديد الحد الأقصى لحجم الملف. إذا تم تحديد قيمة، يتم تعيين الحد الأقصى إلى هذا الرقم؛ وإلا، يتم عرض الحد الحالي.
يمكن عرض أو تعيين حدود عملية عشوائية باستخدام الأداة sysctl(8).
umask [قناع]
يتم تعيين قيمة umask (انظر umask(2)) إلى القيمة الثمانية المحددة. إذا تم حذف الوسيطة، يتم طباعة قيمة umask.
unalias [-a] [اسم]
إذا تم تحديد اسم، فستقوم الصدفة بإزالة هذا الاسم المستعار. إذا تم تحديد -a، فسيتم إزالة جميع الأسماء المستعارة.
unset [-fv] اسم ...
يتم إلغاء تعيين المتغيرات والدوال المحددة وإلغاء تصديرها. إذا تم تحديد -f أو -v، فسيتم إلغاء تعيين الدالة أو المتغير المقابل، على التوالي. إذا كان اسم معين يتوافق مع كل من متغير ودالة، ولم يتم تحديد أي خيارات، فسيتم إلغاء تعيين المتغير فقط.
wait [مهمة]
انتظر حتى تكتمل المهمة المحددة وقم بإرجاع رمز الخروج للعملية الأخيرة في المهمة. إذا تم حذف الوسيطة، فانتظر حتى تكتمل جميع المهام وقم بإرجاع رمز خروج صفر.
تحرير سطر الأوامر
عند استخدام dash بشكل تفاعلي من خلال الطرفية، يمكن تحرير الأمر الحالي وسجل الأوامر (انظر fc في "الأوامر المضمنة") باستخدام تحرير سطر الأوامر في وضع vi. يستخدم هذا الوضع أوامر، كما هو موضح أدناه، مشابهة لمجموعة فرعية من تلك الموضحة في صفحة دليل vi. الأمر 'set -o vi' يمكّن تحرير سطر الأوامر في وضع vi ويضع sh في وضع الإدراج. عند تمكين وضع vi، يمكن التبديل بين وضع الإدراج ووضع الأوامر. إنه مشابه لـ vi: يؤدي كتابة ⟨ESC⟩ إلى الدخول في وضع أوامر vi. سيؤدي الضغط على ⟨return⟩ أثناء وجوده في وضع الأوامر إلى تمرير السطر إلى الصدفة.
رمز الخروج
الأخطاء التي تكتشفها الصدفة، مثل خطأ في بناء الجملة، ستتسبب في خروج الصدفة برمز خروج غير صفري. إذا لم تكن الصدفة صدفة تفاعلية، فسيتم إيقاف تنفيذ ملف الصدفة. وإلا، فستقوم الصدفة بإرجاع رمز الخروج لأخر أمر تم تنفيذه، أو إذا تم استخدام الأمر exit المضمن مع وسيطة رقمية، فستقوم بإرجاع الوسيطة.
البيئة
HOME يتم تعيينه تلقائيًا بواسطة login(1) من دليل تسجيل دخول المستخدم في ملف كلمة المرور (passwd(4)). يعمل هذا المتغير البيئي أيضًا كحجة افتراضية للأمر cd المضمن.
PATH مسار البحث الافتراضي للملفات التنفيذية. انظر القسم أعلاه "البحث في المسار".
CDPATH مسار البحث المستخدم مع الأمر cd المضمن.
MAIL اسم ملف البريد، الذي سيتم التحقق منه للبحث عن وصول رسائل بريد جديدة. يتم تجاوزه بواسطة MAILPATH.
MAILCHECK تحديد تردد (بالثواني) يقوم فيه الصدفة بالتحقق من وصول البريد في الملفات المحددة بواسطة MAILPATH أو ملف MAIL. إذا تم تعيينه على 0، فسيتم إجراء التحقق في كل موجه.
MAILPATH قائمة مفصولة بنقطتين “:” من أسماء الملفات، ليقوم الصدفة بالتحقق منها بحثًا عن رسائل البريد الواردة. هذا الإعداد البيئي يتجاوز إعداد MAIL. هناك حد أقصى 10 صناديق بريد يمكن مراقبتها في وقت واحد.
PS1 سلسلة الموجه الأساسي، والتي تكون افتراضيًا “$ ”، ما لم تكن المستخدم مسؤولًا، وفي هذه الحالة تكون افتراضيًا “# ”.
PS2 سلسلة الموجه الثانوي، والتي تكون افتراضيًا “> ”.
PS4 الإخراج الذي يظهر قبل كل سطر عند تمكين تتبع التنفيذ (set -x)، ويكون افتراضيًا “+ ”.
IFS فواصل الحقول المدخلة. يتم تعيينه عادةً إلى ⟨مسافة⟩، و⟨علامة جدولة⟩، و⟨سطر جديد⟩. راجع قسم "تقسيم المسافات البيضاء" لمزيد من التفاصيل.
TERM إعداد الجهاز الطرفي الافتراضي للصدفة. يتم توريثه بواسطة عمليات الصدفة الفرعية، ويستخدم في أوضاع تحرير السجل.
HISTSIZE عدد الأسطر في مخزن سجل الصدفة.
PWD القيمة المنطقية للدليل الحالي. يتم تعيينه بواسطة الأمر cd.
OLDPWD القيمة المنطقية السابقة للدليل الحالي. يتم تعيينه بواسطة الأمر cd.
PPID معرّف العملية للعملية الأصل للصدفة.
الملفات
$HOME/.profile
/etc/profile
انظر أيضًا
csh(1)، echo(1)، getopt(1)، ksh(1)، login(1)، printf(1)، test(1)، getopt(3)، passwd(5)، environ(7)، sysctl(8)
التاريخ
dash هو تطبيق متوافق مع POSIX لـ /bin/sh ويهدف إلى أن يكون أصغر ما يمكن. dash هو سليل مباشر لإصدار NetBSD من ash (صدفة Almquist)، تم نقله إلى Linux في أوائل عام 1997. تم تغيير اسمه إلى dash في عام 2002.
الأخطاء
يجب تجنب نصوص الصدفة التي تعمل بصلاحيات المستخدم الجذر بأي ثمن، لأنها تمثل خطرًا أمنيًا كبيرًا.
يجب أن تخضع PS1 و PS2 و PS4 لتوسيع المعلمات قبل عرضها.