الرماد - قيادة لينكس - قيادة يونيكس

اسم

sh - مترجم الأوامر ( shell )

موجز

sh [- / + aCefnuvxIimqsVEbc ] [- o longname ] -words [ target ... ]

وصف

Sh هو مترجم الأوامر القياسي للنظام. يتم حاليًا تغيير الإصدار الحالي من sh ليتوافق مع مواصفات POSIX 1003.2 و 1003.2a للعلبة. يحتوي هذا الإصدار على العديد من الميزات التي تجعله يبدو مشابهاً من بعض النواحي لقشرة Korn ، ولكنه ليس نسخة Korn shell (راجع ksh (1)). يتم فقط دمج الميزات التي تم تعيينها بواسطة POSIX بالإضافة إلى بعض ملحقات Berkeley في هذا shell. نتوقع توافق POSIX في الوقت الذي يتم فيه إصدار 4.4 BSD. ليس المقصود هذه الصفحة رجل أن يكون تعليمي أو مواصفات كاملة للقذيفة.

نظرة عامة

shell هو أمر يقرأ الأسطر من أي ملف أو من المحطة ، ويفسرها ، وينفذ الأوامر الأخرى بشكل عام. هو البرنامج الذي يتم تشغيله عندما يقوم مستخدم بتسجيل الدخول إلى النظام (على الرغم من أنه يمكن للمستخدم تحديد shell مختلفة باستخدام الأمر chsh (1)). يطبق shell لغة تحتوي على تركيبات التحكم في التدفق ، وهو مرفق ماكرو يوفر مجموعة متنوعة من الميزات بالإضافة إلى تخزين البيانات ، إلى جانب إمكانات تحرير التاريخ والخطوط المضمنة. وهو يشتمل على العديد من الميزات للمساعدة في الاستخدام التفاعلي وله ميزة أن اللغة التفسيرية مشتركة لكل من الاستخدام التفاعلي وغير التفاعلي (نصوص shell). أي ، يمكن كتابة الأوامر مباشرة إلى shell قيد التشغيل أو يمكن وضعها في ملف ويمكن تنفيذ الملف مباشرة بواسطة shell.

استدعاء

في حالة عدم وجود أي args وفي حالة توصيل الإدخال القياسي من shell إلى محطة طرفية (أو إذا تم تعيين علامة - i ) ، وكان الخيار - c غير موجود ، يعتبر shell shell التفاعلية. يطالب shell التفاعلي بشكل عام قبل كل أمر ويعالج أخطاء البرمجة والأوامر بشكل مختلف (كما هو موضح أدناه). عند بدء التشغيل لأول مرة ، تقوم shell بفحص الوسيطة 0 ، وإذا بدأت بشرطة "-" فإن shell يعتبر أيضًا shell تسجيل دخول. عادة ما يتم ذلك تلقائيًا بواسطة النظام عند تسجيل دخول المستخدم لأول مرة. تقوم قوقعة تسجيل الدخول أولاً بقراءة الأوامر من الملفات / etc / profile و .profile إذا كانت موجودة. إذا تم تعيين متغير البيئة ENV على إدخال إلى shell ، أو تم تعيينه في .profile من shell تسجيل الدخول ، يقرأ shell التالي الأوامر من الملف المسمى في ENV لذلك ، يجب على المستخدم وضع الأوامر التي سيتم تنفيذها فقط في وقت تسجيل الدخول في ملف .profile ، والأوامر التي يتم تنفيذها لكل قذيفة داخل ملف ENV . لضبط متغير ENV على بعض الملفات ، ضع السطر التالي في .profile الخاص بك في الدليل الرئيسي

ENV = $ HOME / .shinit. تصدير ENV

استبدال "` .shinit "أي اسم الملف الذي ترغب فيه. نظرًا لأنه تتم قراءة ملف ENV لكل استدعاء من shell ، بما في ذلك البرامج النصية shell والأصداف غير التفاعلية ، يكون النموذج التالي مفيدًا لتقييد الأوامر في ملف ENV إلى الدعوات التفاعلية. ضع الأوامر داخل `` case '' و `` esac '' أدناه (يتم وصف هذه الأوامر لاحقًا):

case $ - in * i *)

# أوامر للاستخدام التفاعلي فقط

...

ESAC

إذا تم تحديد وسيطات سطر الأوامر إلى جانب الخيارات ، فإن shell يعامل الوسيطة الأولى كاسم ملف يمكن منه قراءة الأوامر (برنامج نصي shell) ، ويتم تعيين الوسيطات المتبقية كمعلمات موضعية للصدفة ($ 1 ، 2 دولار ، وما إلى ذلك). خلاف ذلك ، يقرأ shell الأوامر من الإدخال القياسي الخاص به.

معالجة قائمة الوسيطة

تحتوي جميع خيارات الحروف الفردية على اسم مناظر يمكن استخدامه كوسيطة للخيار o . يتم توفير الاسم set- o بجوار خيار الحرف الواحد في الوصف أدناه. يؤدي تحديد شرطة "` - "إلى تشغيل الخيار ، بينما يؤدي استخدام علامة الجمع" `+" إلى تعطيل الخيار. يمكن تعيين الخيارات التالية من سطر الأوامر أو مع المجموعة (1) المضمنة (الموضحة لاحقًا).

- أليكسبورت

تصدير جميع المتغيرات المخصصة ل. (غير مكتمل لـ 4.4alpha)

-c

قراءة الأوامر من سطر الأوامر. سيتم قراءة أي أوامر من الإدخال القياسي.

-C نوكلوبير

لا تقم بالكتابة فوق الملفات الموجودة بـ ``> '((غير مخصّص لـ 4.4alpha)

-e errexit

إذا لم تكن تفاعلية ، قم بالخروج فوراً إذا فشل أي أمر لم يتم اختباره. تعتبر حالة الخروج لأمر اختبارًا صريحًا إذا تم استخدام الأمر للتحكم في if إذا كان أو حتى أو إذا كان الأمر هو المعامل اليدوي لعامل `` && '' أو `` || '.

-f noglob

تعطيل توسيع اسم المسار .

-n noexec

إذا لم يكن تفاعليًا ، قم بقراءة الأوامر ولكن لا تقم بتنفيذها. هذا مفيد للتحقق من صيغة النصوص البرمجية shell.

-أو nounset

اكتب رسالة إلى الخطأ القياسي عند محاولة توسيع متغير لم يتم تعيينه ، وإذا لم تكن shell تفاعلية ، فقم بالخروج مباشرة. (غير مكتمل لـ 4.4alpha)

-v مطول

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

اكس اكستريس

اكتب كل أمر إلى الخطأ القياسي (مسبوقًا بعلامة `+` قبل أن يتم تنفيذه. مفيد لتصحيح الأخطاء.

-q quietprofile

إذا تم تعيين الخيارات - v أو - x ، فلا تقم بتطبيقها عند قراءة ملفات التهيئة ، هذه الملفات / etc / profile .profile والملف المحدد بواسطة متغير بيئة ENV .

- أنا أهمل

تجاهل EOF's من الإدخال عند التفاعلية.

- تفاعلية

إجبار الصدفة على التصرف بشكل تفاعلي.

م مراقب

قم بتشغيل التحكم في الوظيفة (تعيين تلقائي عندما تكون تفاعلية).

-s ستدين

قراءة الأوامر من الإدخال القياسي (يتم تعيينها تلقائيًا في حالة عدم وجود وسائط ملف). لا يكون لهذا الخيار أي تأثير عند تعيينه بعد بدء تشغيل shell بالفعل (أي مع مجموعة (1)).

-V vi

تمكين محرر سطر الأوامر المضمنة vi (1) (تعطيل - E إذا تم ضبطه).

-E emacs

تمكين محرر سطر الأوامر المدمج emacs (1) (تعطيل - V إذا تم تعيينه).

- ب إخطار

تمكين الإعلام غير المتزامن لإكمال مهمة الخلفية. (غير مكتمل لـ 4.4alpha)

هيكل معجمي

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

"مشغلي التحكم:"

& && ()؛ ؛؛ | || <السطر>

"مشغل إعادة التوجيه:"

<>> | << >> <&> & << - <>

نقلا عن

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

مائل

يحافظ الخط المائل عكسي على المعنى الحرفي للحرف التالي ، باستثناء Aq newline. يتم التعامل مع الخط المائل العكسي الذي يسبق السطر الجديد Aq على أنه استمرار خط.

ونقلت واحدة

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

التنصيص

يحافظ إرفاق الأحرف ضمن علامات اقتباس مزدوجة على المعنى الحرفي لجميع الأحرف باستثناء backquote ($) ($) backlines ($) وخط مائل عكسي (\) إن الخط المائل للخلف داخل علامات اقتباس مزدوجة هو تاريخياً عجيب ، ويعمل على اقتباس الأحرف التالية فقط:

$ `\

وإلا فإنه يبقى حرفيًا.

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

الكلمات المحجوزة هي كلمات لها معنى خاص للصدفة ويتم التعرف عليها في بداية السطر وبعد مشغل التحكم. فيما يلي الكلمات المحجوزة:

! Ta elif Ta fi Ta while Ta case

else Ta for Ta then Ta {Ta}

هل تا فعلت تا حتى تا تا esac

ويناقش معناها في وقت لاحق.

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

الاسم المستعار هو اسم وقيمة تعيين المطابق باستخدام الأمر alias (1). عندما تحدث كلمة محجوزة (انظر أعلاه) ، وبعد التحقق من الكلمات المحجوزة ، يقوم shell بالتحقق من الكلمة لمعرفة ما إذا كان يتطابق مع اسم مستعار. إذا كان كذلك ، فإنه يستبدلها في تدفق الإدخال بقيمة. على سبيل المثال ، إذا كان هناك اسم مستعار يسمى `'lf' 'بالقيمة` `ls -F' '، فسيكون الإدخال:

lf foobar

قد يصبح

ls -F foobar

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

الأوامر

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

أوامر بسيطة

إذا تم التعرف على أمر بسيط ، تقوم shell بتنفيذ الإجراءات التالية:

  1. يتم التخلص من الكلمات الرئيسية للنموذج "اسم = قيمة" ويتم تعيينها إلى بيئة الأمر البسيط. يتم فصل مشغلي إعادة التوجيه وحجوزاتهم (كما هو موضح أدناه) وحفظها للمعالجة.
  2. يتم توسيع الكلمات المتبقية كما هو موضح في المقطع المسمى `` Expansions '' وتعتبر الكلمة المتبقية الأولى اسم الأمر ويتم وضع الأمر. تعتبر الكلمات المتبقية وسائط الأمر. إذا لم يكن هناك أي اسم أمر ، فإن تخصيصات المتغير `` name = value '' المعترف بها في البند 1 تؤثر على shell الحالي.
  3. يتم تنفيذ عمليات إعادة التوجيه كما هو موضح في القسم التالي.

إعادة توجيه

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

[ن] ملف redir-op

حيث redir-op هي واحدة من عوامل إعادة التوجيه المذكورة سابقا. فيما يلي قائمة بإمكانية إعادة التوجيه. Bq n هو رقم اختياري ، كما هو الحال في `3 '(وليس' Bq 3 'يشير إلى واصف الملف.

[n]> ملف

إعادة توجيه الإخراج القياسي (أو n) إلى الملف.

[n]> | ملف

نفس ، ولكن تجاوز الخيار - C.

[n] >> ملف

إلحاق الإخراج القياسي (أو n) إلى الملف.

[ن] <ملف

إعادة توجيه الإدخال القياسي (أو n) من الملف.

[n1] <& n2

تكرار الإدخال القياسي (أو n1) من واصف الملف n2.

[n] <& -

إغلاق الإدخال القياسي (أو n).

[n1]> & n2

الناتج القياسي المكرر (أو n1) من n2.

[n]> & -

إغلاق الإخراج القياسي (أو ن).

[n] <> ملف

فتح الملف للقراءة والكتابة على الإدخال القياسي (أو n).

غالبًا ما يُطلق على إعادة التوجيه التالي اسم "المستند هنا".

[n] << delimiter

هنا للوثائق النص ...

محدد

يتم حفظ كل النص الموجود في الخطوط المتعاقبة إلى المحدد ويتم إتاحته للأمر في الإدخال القياسي ، أو واصف الملف n إذا تم تحديده. إذا تم الاستشهاد بالمحدد كما هو محدد في السطر الأولي ، فسيتم التعامل مع نص الوثيقة هنا حرفيًا ، وإلا فسيخضع النص لتوسيع المعلمة واستبدال الأمر والتوسيع الحسابي (كما هو موضح في قسم "التوسعات"). "إذا كان المشغل` `- - '' بدلاً من` `<< '' ، فسيتم تجريد علامات التبويب الموجودة في نص الوثيقة هنا.

البحث والتنفيذ

هناك ثلاثة أنواع من الأوامر: وظائف shell وأوامر builtin وبرامج عادية - ويتم البحث عن الأمر (بالاسم) بهذا الترتيب. يتم تنفيذ كل منهما بطريقة مختلفة.

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

يتم تنفيذ shell builtins داخليًا على shell ، دون إنتاج أي عملية جديدة.

وإلا ، إذا لم يتطابق اسم الأمر مع وظيفة أو مضمن ، يتم البحث عن الأمر كبرنامج عادي في نظام الملفات (كما هو موضح في القسم التالي). عند تنفيذ برنامج عادي ، يقوم shell بتشغيل البرنامج ، ويمرر الوسيطات والبيئة إلى البرنامج. إذا لم يكن البرنامج ملفًا عاديًا للتنفيذ (على سبيل المثال ، إذا لم يبدأ بـ "الرقم السحري" الذي يكون تمثيل ASCII هو "#!" ، فإن execve (2) سيُرجِع Er ENOEXEC بعد ذلك) ستقوم shell بتفسير البرنامج في المستوى الفرعي. سيتم إعادة تهيئة غلاف الطفل بنفسه في هذه الحالة ، بحيث يكون التأثير كما لو تم استدعاء shell جديد لمعالجة البرنامج النصي shell المخصص ، إلا أنه سيتم تذكر موقع الأوامر المجزأة الموجود في shell الأصل من قبل الطفل.

لاحظ أن الإصدارات السابقة من هذا المستند ورمز المصدر نفسه بشكل مضلل وبشكل متقطع يشير إلى برنامج نصي shell بدون رقم سحري كـ "إجراء shell".

مسار البحث

عند تحديد موقع أمر ، فإن القشرة تبدو لأول مرة لمعرفة ما إذا كان لديها وظيفة shell بهذا الاسم. ثم يبحث عن أمر مدمج بهذا الاسم. إذا لم يتم العثور على أمر مدمج ، يحدث أحد أمرين:

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

حالة خروج القيادة

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

أوامر معقدة

الأوامر المعقدة عبارة عن مجموعات من الأوامر البسيطة مع مشغلات التحكم أو الكلمات المحجوزة ، معًا إنشاء أمر معقد أكبر. بشكل عام ، يكون الأمر واحدًا مما يلي:

ما لم ينص على خلاف ذلك ، فإن حالة الخروج لأمر هي أمر آخر أمر بسيط تم تنفيذه بواسطة الأمر.

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

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

تنسيق خط الأنابيب هو:

[!] command1 [| command2 ...]

يتم توصيل الإخراج القياسي من command1 بالإدخال القياسي لـ command2. يعتبر الإدخال القياسي أو الإخراج القياسي أو كلا الأمرين معينًا بواسطة خط الأنابيب قبل أي إعادة توجيه محددة بواسطة مشغلات إعادة التوجيه التي تشكل جزءًا من الأمر.

إذا لم يكن خط الأنابيب في الخلفية (تمت مناقشته لاحقًا) ، فإن shell ينتظر انتهاء جميع الأوامر.

إذا كانت الكلمة محفوظة! لا يسبق خط الأنابيب ، حالة الخروج هي حالة الخروج من الأمر الأخير المحدد في خط الأنابيب. وإلا ، فإن حالة الخروج هي القيمة المنطقية غير لحالة خروج الأمر الأخير. بمعنى ، إذا أرجع الأمر الأخير الصفر ، تكون حالة الخروج هي 1 ؛ إذا كان الأمر الأخير بإرجاع أكبر من الصفر ، تكون حالة الخروج صفر.

نظرًا لأن تعيين خط الأنابيب للمدخلات القياسية أو الإخراج القياسي أو كليهما يحدث قبل إعادة التوجيه ، فيمكن تعديله عن طريق إعادة التوجيه. فمثلا:

$ command1 2> & 1 | command2

يرسل الإخراج القياسي والخطأ القياسي من command1 إلى الإدخال القياسي لـ command2.

ا ؛ أو الإنهاء يؤدي السابق AND-OR- قائمة (الموضحة أدناه) ليتم تنفيذها بالتسلسل؛ أ & يؤدي التنفيذ غير المتزامن من قائمة AND-OR السابقة.

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

أوامر الخلفية -

إذا تم إنهاء أمر بواسطة عامل تشغيل عنصر التحكم (&) ، تقوم shell بتنفيذ الأمر بشكل غير متزامن - أي ، لا تنتظر shell الأمر حتى ينتهي قبل تنفيذ الأمر التالي.

تنسيق تشغيل أمر في الخلفية هو:

command1 و [command2 & ...]

إذا كانت shell غير تفاعلية ، فسيتم تعيين الإدخال القياسي لأمر غير متزامن على / dev / null

القوائم - يتحدث بشكل عام

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

مشغلات قائمة قصر

`` && '' و `'||' 'هي عوامل تشغيل قائمة AND-OR. `` && '' ينفذ الأمر الأول ، ثم ينفذ الأمر الثاني إذا كانت حالة الخروج للأمر الأول هي صفر. `` || '' مشابه ، لكنه ينفذ الأمر الثاني إذا كانت حالة الخروج للأمر الأول غير صفرية. كل من "` && "و" '|| "كلاهما لهما نفس الأولوية.

تصاريح التحكم في التدفق - إذا ، بالنسبة للحالة

بناء جملة الأمر if

إذا القائمة
ثم قائمة
[قائمة elif
ثم قائمة] ...
[قائمة أخرى]
فاي

بناء جملة الأمر أثناء

في حين القائمة
تأليف لائحة
فعله

يتم تنفيذ القائمتين بشكل متكرر بينما تكون حالة الخروج من القائمة الأولى صفراً. يتشابه الأمر until ، ولكنه يحتوي على الكلمة حتى مكانها ، مما يؤدي إلى تكرارها حتى تصبح حالة الخروج من القائمة الأولى صفراً.

بناء جملة الأمر للأمر

للمتغير في كلمة ...
تأليف لائحة
فعله

يتم توسيع الكلمات ، ثم يتم تنفيذ القائمة بشكل متكرر مع تعيين متغير لكل كلمة في المقابل. يمكن الاستعاضة عن الفعل والقيام بهما بـ `` {'' و ``} ''

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

كسر [عدد]
تابع [عدد]

فاصل إنهاء num أعمق أو أثناء حلقات. استمر في الاستمرار مع التكرار التالي للحلقة الداخلية. يتم تنفيذ هذه الأوامر المضمنة.

صيغة بناء جملة الأمر

كلمة حالة في
نمط) قائمة ؛
...
ESAC

يمكن أن يكون النمط في الواقع نموذجًا واحدًا أو أكثر (راجع أنماط Shell الموضحة لاحقًا) ، مفصولة بأحرف `` '.

تجميع الأوامر معا

قد يتم تجميع الأوامر عن طريق الكتابة إما

(قائمة)

أو

{list؛

الأول من هؤلاء ينفذ الأوامر في subshell. أوامر المضمنة مجمعة في (قائمة) لن يؤثر على shell الحالي. لا يقوم النموذج الثاني بتشكيل غلاف آخر حتى يكون أكثر كفاءة بشكل طفيف. تسمح لك أوامر التجميع معًا بهذه الطريقة بإعادة توجيه الإخراج كما لو كان برنامجًا واحدًا:

{printf hello؛ العالم printf \ n "؛}> التحية

المهام

بناء جملة تعريف الدالة

اسم () الأمر

تعريف الدالة هو عبارة قابلة للتنفيذ؛ عند تنفيذه يقوم بتثبيت وظيفة مسماة باسم وإرجاع حالة خروج صفر. عادة ما يكون الأمر عبارة عن قائمة محاطة بين `` {'' و ``} ''

قد يتم اعتبار المتغيرات محلية لدالة باستخدام أمر محلي. يجب أن يظهر هذا كـ العبارة الأولى من دالة وهو بناء الجملة

المحلي [متغير | -] ...

يتم تنفيذ المحلية كأمر مدمج.

عندما يتم إجراء متغير محلي ، فإنه يرث القيمة الأولية وعلامات تصدير و readonly من المتغير بنفس الاسم في النطاق المحيط ، إذا كان هناك واحد. خلاف ذلك ، فإن المتغير لا يتم تعيينه في البداية. تستخدم shell التحليل الديناميكي ، بحيث إذا قمت بإجراء المتغير x المحلي إلى الدالة f ، والتي تستدعي الدالة g ، فستشير إلى المتغير x المتغير داخل g إلى المتغير x المُعلن داخل f ، وليس للمتغير الشامل المسمى x .

المعلمة الخاصة الوحيدة التي يمكن إجراؤها محلياً هي `` - '' جعل `` - '' أي خيارات محلية shell يتم تغييرها عن طريق الأمر set داخل الدالة ليتم استعادتها إلى قيمها الأصلية عند إرجاع الدالة.

بناء جملة الأمر الإرجاع

العودة [exitstatus

انه ينهي وظيفة التنفيذ حاليا. يتم تنفيذ العودة كأمر مدمج.

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

تحتفظ shell بمجموعة من المعلمات. يُطلق على المعلمة المشار إليها باسم ما اسم المتغير. عند بدء التشغيل ، تقوم shell بتحويل كافة متغيرات البيئة إلى متغيرات shell. يمكن تعيين المتغيرات الجديدة باستخدام النموذج

اسم = قيمة

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

المعلمات Position

المعلمة الموضعية هي معلمة برقم (n> 0). يقوم shell بتعيين هذه القيم في البداية لقيم وسيطات سطر الأوامر الخاصة به والتي تتبع اسم البرنامج النصي shell. يمكن أيضًا استخدام المجموعة (1) المضمنة لضبطها أو إعادة ضبطها.

المعلمات الخاصة

المعلمة الخاصة هي معلمة تشير إلى أحد الأحرف الخاصة التالية. يتم سرد قيمة المعلمة بجانب الحرف الخاص به.

*

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

@

يمتد إلى المعلمات الموضعية ، بدءا من واحد. عندما يحدث التوسع ضمن علامات تنصيص مزدوجة ، يتم توسيع كل معلمة موضعية كوسيطة منفصلة. إذا لم تكن هناك معلمات موضعية ، فإن توسيع @ يولد حججًا صفرية ، حتى عندما تكون علامة @ مزدوجة. ما يعنيه هذا بشكل أساسي ، على سبيل المثال ، إذا كان $ 1 هو "abc" ، وكان $ 2 هو "def ghi" ، ثم Qq $ @ يتم توسيعه إلى الوسيطتين:

abc def ghi

#

يمتد إلى عدد من المعلمات الموضعية.

؟

يمتد إلى حالة الخروج من أحدث خط أنابيب.

- (الواصلة.)

يتوسع إلى علامات الخيار الحالية (أسماء الخيارات أحادية الحرف متسلسلة في سلسلة) كما هو محدد في الطلب ، من خلال أمر setin المدمج ، أو ضمنيًا بالصدفة.

$

يتوسع لمعرف العملية للهيكل المستدعي. تحتفظ Subshell بنفس قيمة $ الأصل.

!

يتوسع لمعرف العملية لأحدث أمر خلفية تم تنفيذه من shell الحالي. بالنسبة لخط الأنابيب ، يكون معرف العملية هو الأمر الأخير في خط الأنابيب.

0 (صفر.)

يمتد إلى اسم البرنامج النصي shell أو shell.

توسع كلمة

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

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

ترتيب توسيع الكلمات هو:

  1. توسيع تيلدا ، توسيع المعلمة ، تبديل القيادة ، التوسع الحسابي (كل هذه تحدث في نفس الوقت).
  2. يتم تنفيذ "تقسيم الحقل" على الحقول التي تم إنشاؤها بواسطة الخطوة (1) ما لم يكن متغير IFS فارغًا.
  3. Pathname Expansion (ما لم يكن set- f ساري المفعول).
  4. إزالة الاقتباس.

يتم استخدام الحرف $ لإدخال توسيع المعلمة أو استبدال الأمر أو التقييم الحسابي.

توسيع تيلدا (استبدال الدليل الرئيسي للمستخدم)

يتم بدء الكلمة التي تبدأ بحرف التلدة غير المطابقة (~) لتوسيع تيلدا. يتم التعامل مع جميع الأحرف إلى شرطة مائلة (/) أو نهاية الكلمة كاسم مستخدم ويتم استبدالها بدليل المستخدم الرئيسي. إذا كان اسم المستخدم مفقودًا (كما في ~ / foobar) ، فسيتم استبدال التيلدا بقيمة المتغير HOME (الدليل الرئيسي للمستخدم الحالي).

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

يكون تنسيق توسيع المعلمة كما يلي:

حيث يتكون التعبير من جميع الأحرف حتى لا تتطابق مع المطابقة ``} '' أي ``} '' بواسطة شرطة مائلة عكسية أو داخل سلسلة مقتبسة ، ولا يتم فحص الأحرف في التوسعات الحسابية المدمجة ، واستبدال الأوامر ، والتوسعات المتغيرة ، في تحديد المطابقة ``} ''

أبسط شكل لتوسيع المعلمة هو:

يتم استبدال القيمة ، إن وجدت ، من المعلمة.

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

  1. لا يتم تنفيذ توسيع Pathname على نتائج التوسع.
  2. لا يتم تنفيذ تقسيم الحقل على نتائج التوسيع ، باستثناء @.

بالإضافة إلى ذلك ، يمكن تعديل توسيع المعلمة باستخدام أحد التنسيقات التالية.

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

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

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

استخدم قيمة بديلة. إذا كانت المعلمة غير محددة أو خالية ، فسيتم استبدال null؛ خلاف ذلك ، يتم استبدال توسع الكلمة.

في توسيعات المعلمات المعروضة سابقًا ، يؤدي استخدام النقطتين في التنسيق إلى اختبار لمعلمة غير محددة أو خالية ؛ يؤدي إغفال القولون إلى اختبار لمعلمة يتم تعيينها فقط.

طول سلسلة. الطول بالأحرف من قيمة المعلمة.

توفر الأنواع الأربعة التالية من توسيع المعلمة معالجة فرعية. في كل حالة ، يتم استخدام تدوين مطابقة النمط (راجع أنماط Shell) بدلاً من تدوين التعبير العادي ، لتقييم الأنماط. إذا كانت المعلمة هي * أو @ ، فإن نتيجة التوسع غير محددة. لا يؤدي إحاطة سلسلة توسيع المعلمة الكاملة في علامات اقتباس مزدوجة إلى اقتباس الأنواع الأربعة التالية من أحرف النمط ، في حين أن اقتباس الأحرف داخل الأقواس له هذا التأثير.

إزالة أصغر نمط لاحقة. يتم توسيع الكلمة لإنتاج نمط. ينتج عن توسع المعلمة في المعلمة ، مع أصغر جزء من اللاحقة يتطابق مع النمط المحذوف.

إزالة أكبر نمط لاحقة. يتم توسيع الكلمة لإنتاج نمط. ينتج عن توسع المعلمة في المعلمة ، مع حذف الجزء الأكبر من اللاحق المطابق للنمط.

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

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

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

يسمح استبدال الأوامر باستبدال إخراج أمر بدلاً من اسم الأمر نفسه. يحدث استبدال الأمر عندما يتم تضمين الأمر كما يلي:

$ (الأمر)

أو بو `` backquoted '' نسخة الكمبيوتر:

`command`

تقوم shell بتوسيع استبدال الأمر عن طريق تنفيذ الأمر في بيئة فرعية واستبدال استبدال الأمر بالمخرج القياسي للأمر ، إزالة تسلسلات واحدة أو أكثر s في نهاية الاستبدال. (لا يتم إزالة المضمن s قبل نهاية المخرجات ؛ ومع ذلك ، أثناء تقسيم المجال ، يمكن ترجمتها إلى s ، اعتمادًا على قيمة IFS والإقتباس في الواقع.)

التوسع الحسابي

يوفر التوسع الحسابي آلية لتقييم تعبير حسابي واستبدال قيمته. يكون تنسيق التوسع الحسابي كما يلي:

$ ((التعبير))

يتم التعامل مع التعبير كما لو كان في علامات اقتباس مزدوجة ، باستثناء أن الاقتباس المزدوج داخل التعبير لا يتم التعامل معه بشكل خاص. يوسع shell كل الرموز المميزة في التعبير لتوسيع المعلمة ، واستبدال الأمر ، وإقتباس الاقتباس.

بعد ذلك ، تعامل القوقعة ذلك كتعبير حسابي وتحل محل قيمة التعبير.

تقسيم الفضاء الأبيض (Field Splitting)

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

يعامل shell كل حرف من IFS كمحدد ويستخدم المحددات لتقسيم نتائج توسيع المعلمة واستبدال الأمر في الحقول.

توسيع اسم Pathname (إنشاء اسم الملف)

ما لم يتم تعيين علامة f ، يتم إنشاء اسم الملف بعد اكتمال تقسيم الكلمات. يتم النظر إلى كل كلمة على أنها سلسلة من الأنماط ، مفصولة بخطوط مائلة. تحل عملية التوسع محل الكلمة بأسماء كل الملفات الموجودة التي يمكن تشكيل أسماؤها باستبدال كل نمط بسلسلة تتطابق مع النمط المحدد. هناك نوعان من القيود على ذلك: أولاً ، لا يمكن أن يتطابق النمط مع سلسلة تحتوي على شرطة مائلة ، وثانياً ، لا يمكن أن يتطابق النمط مع سلسلة تبدأ مع فترة ما لم يكن الحرف الأول للنمط عبارة عن نقطة. يصف القسم التالي الأنماط المستخدمة لكل من توسع Pathname وأمر الحالة (1).

أنماط شل

يتكون النمط من الأحرف العادية ، التي تتطابق مع نفسها ، وأحرف meta. الأحرف الفوقية هي ``! '' `` '' '' '' '' و '' '' '' '' تفقد هذه الأحرف معانيها الخاصة إذا تم اقتباسها. عند إجراء تبديل أو تبديل متغير ولا يتم اقتباس علامات الاقتباس أو علامات الاقتباس بالدولار ، يتم مسح قيمة المتغير أو إخراج الأمر لهذه الأحرف ويتم تحويلها إلى أحرف وصفية.

تطابق علامة النجمة (`` * '') أي سلسلة من الأحرف. تتطابق علامة الاستفهام مع أي حرف مفرد. يقوم القوس الأيسر (`'[' '] بتقديم فئة شخصية. يتم الإشارة إلى نهاية فئة الحرف من خلال (`` '' ') إذا كان ``]' 'مفقودًا ثم `` [' 'يطابق `` [' 'بدلاً من تقديم فئة أحرف. يطابق فئة أحرف أي من الأحرف بين الأقواس المربعة. يمكن تحديد مجموعة من الأحرف باستخدام علامة الطرح. قد يتم إكمال فئة الأحرف عن طريق جعل علامة التعجب أول حرف لفئة الحرف.

لتضمين ``] '' في فئة الحرف ، اجعله أول حرف مدرج (بعد '`!' 'إن وجد). لتضمين علامة ناقص ، اجعلها أول أو آخر حرف مدرج

Builtins

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

:

أمر فارغ يقوم بإرجاع قيمة الخروج 0 (true).

. ملف

يتم قراءة الأوامر الموجودة في الملف المحدد وتنفيذها بواسطة shell.

اسم مستعار [ الاسم [ = string ... ]]

إذا تم تحديد اسم = string ، يحدد shell الاسم المستعار مع سلسلة القيمة إذا تم تحديد الاسم فقط ، تتم طباعة قيمة الاسم المستعار. مع عدم وجود حجج ، يطبع الاسم المستعار المدمج أسماء وقيم جميع الأسماء المستعارة المحددة (انظر unalias)

bg [ job] ...

متابعة المهام المحددة (أو الوظيفة الحالية إذا لم يتم إعطاء أي وظائف) في الخلفية.

قيادة الأمر أرج ...

تنفيذ الأمر المدمج المحدد. (هذا مفيد عندما يكون لديك دالة shell بنفس الاسم كأمر مضمن.)

مؤتمر نزع السلاح [ الدليل ]

قم بالتبديل إلى الدليل المحدد (افتراضي $ HOME) إذا ظهر إدخال CDPATH في بيئة الأمر cd أو تم تعيين متغير shell CDPATH ولم يبدأ اسم الدليل بخط مائل ، فسيتم البحث عن الدلائل المدرجة في CDPATH للدليل المحدد. تنسيق CDPATH هو نفس تنسيق PATH في shell التفاعلية ، سيطبع الأمر cd اسم الدليل الذي قام بالتبديل إليه بالفعل إذا كان هذا مختلفًا عن الاسم الذي قدمه المستخدم. قد تكون هذه مختلفة إما بسبب استخدام آلية CDPATH أو بسبب تم عبور ارتباط رمزي.

سلسلة eval ...

سلسل جميع الحجج مع المساحات. ثم إعادة تحليل وتنفيذ الأمر.

exec [ الأمر arg ... ]

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

الخروج [ exitstatus ]

قم بإنهاء عملية shell. إذا تم إعطاء exitstatus يتم استخدامه كحالة خروج shell ؛ وإلا يتم استخدام حالة الخروج من الأمر السابق.

اسم التصدير ...

تصدير -p

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

اسم التصدير = القيمة

بدون أي وسيطات يقوم أمر التصدير بسرد أسماء كل المتغيرات المصدرة. مع الخيار - p المحدد سيتم تنسيق الإخراج بشكل مناسب للاستخدام غير التبادلي.

fc [- e editor ] [ first [ last ]]

fc -l [- nr ] [ first [ last ]]

fc -s [ old = new ] [ first ]

يقوم fc builtin بقراءة الأوامر التي تم إدخالها مسبقًا إلى shell التفاعلي أو تحريرها وإعادة تنفيذها.

من المحرر

استخدم المحرر المسمى من قبل محرر لتحرير الأوامر. سلسلة المحرر هي اسم أمر ، تخضع للبحث من خلال المتغير PATH . يتم استخدام القيمة في متغير FCEDIT كافتراضي عندما لا يتم تحديد e . إذا كانت FCEDIT خالية أو غير محددة ، فسيتم استخدام قيمة متغير EDITOR . إذا كان EDITOR هو null أو unset ، يتم استخدام ed (1) كمحرر.

-l (ell)

أدرج الأوامر بدلاً من استدعاء محرر عليها. تتم كتابة الأوامر بالتسلسل المشار إليه بواسطة المعاملين الأول والأخير ، حيث تتأثر بـ - r بكل أمر يسبقه رقم الأمر.

-n

منع أرقام الأوامر عند الإدراج مع -l.

-r

عكس ترتيب الأوامر المدرجة (مع - ل أو تحريرها (مع لا - لا - ق)

-s

أعد تنفيذ الأمر بدون استدعاء محرر.

أول

الاخير

حدد الأوامر المطلوب إدراجها أو تعديلها. يتم تحديد عدد الأوامر السابقة التي يمكن الوصول إليها بواسطة قيمة متغير HISTSIZE . قيمة الأول أو الأخير أو كليهما واحدة مما يلي:

[+] عدد

رقم موجب يمثل رقم الأمر ؛ يمكن عرض أرقام الأوامر مع الخيار - l .

-رقم

رقم عشري سالب يمثل الأمر الذي تم تنفيذه لعدد الأوامر السابقة. على سبيل المثال ، -1 هو الأمر السابق مباشرة.

خيط

سلسلة تشير إلى الأمر الذي تم إدخاله حديثًا والذي يبدأ بهذه السلسلة. إذا لم يكن المعامل القديم = الجديد محددًا أيضًا - s لا يمكن أن يحتوي نموذج السلسلة الخاص بالمعامل الأول على علامة مساواة مدمجة.

تؤثر متغيرات البيئة التالية على تنفيذ fc:

FCEDIT

اسم المحرر لاستخدامه.

HISTSIZE

عدد الأوامر السابقة التي يمكن الوصول إليها.

fg [ وظيفة ]

انقل المهمة المحددة أو المهمة الحالية إلى المقدمة.

getopts optstring var

الأمر POSIX getopts ، لا يجب الخلط بينه وبين Bell gets -derived getopt (1).

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

الأمر getopts يستبعد المنفعة getopt (1) القديمة بسبب تعاملها مع الحجج التي تحتوي على مسافة بيضاء.

قد يتم استخدام getopts builtin للحصول على الخيارات وحججها من قائمة المعلمات. عند استدعاء ، يضع getopts قيمة الخيار التالي من سلسلة الخيار في القائمة في متغير shell المحدد بواسطة var وفهرسه في متغير shell OPTIND عند استدعاء shell ، تتم تهيئة OPTIND إلى 1. لكل خيار يتطلب حجة ، فإن getopts builtin سيضعه في متغير shell OPTARG إذا لم يكن خيارًا مسموحًا به في optstring ، فلن يتم تعيين OPTARG .

optstring هو سلسلة من خطابات الخيار المعترف بها. إذا تم اتباع حرف بنقطتين ، فمن المتوقع أن يكون للخيار حجة قد تكون أو لا يمكن فصلها عنها بمسافة بيضاء. إذا لم يتم العثور على حرف الخيار في المكان المتوقع ، فسيعمل تطبيق getopts على تعيين متغير var على "`؟ "سوف يؤدي getobts إلى إلغاء تعيين OPTARG وكتابة الإخراج إلى الخطأ القياسي. من خلال تحديد النقطتين كأول حرف من optstring سيتم تجاهل جميع الأخطاء.

يتم إرجاع قيمة غير صفرية عند الوصول إلى الخيار الأخير. إذا لم تكن هناك وسيطات متبقية ، فسيتم تعيين gop var إلى الخيار الخاص ، "` - "وإلا ، فإنه سيتم تعيين var على" `؟"

يوضح جزء التعليمات البرمجية التالي كيف يمكن معالجة الوسيطات للأمر الذي يمكن أن يأخذ الخيارات [أ] و [ب] والخيار [c] الذي يتطلب وسيطة.

بينما يخطئ abc: f
فعل
case $ f in
أ | ب) العلم = $ f ؛؛
c) carg = $ OPTARG ؛؛
\؟) echo $ USAGE؛ الخروج 1 ؛
ESAC
فعله
shift `expr $ OPTIND - 1`

سيقبل هذا الرمز أي مما يلي كما يلي:

cmd -karg file file
cmd -a -c ملف ملف arg
cmd -carg -a ملف ملف
cmd -a -carg - ملف ملف

أمر hash -rv ...

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

باستخدام الوسيطات ، يقوم أمر التجزئة بإزالة الأوامر المحددة من جدول التجزئة (إلا إذا كانت دالات) ثم تحديد موقعها. مع الخيار - v ، تقوم التجزئة بطباعة مواقع الأوامر كما تجدها. يتسبب الخيار - r في أمر التجزئة بحذف جميع الإدخالات في جدول التجزئة باستثناء الدالات.

jobid [ وظيفة ]

اطبع معرف العملية الخاص بالعمليات في المهمة. إذا تم حذف وسيطة المهمة ، يتم استخدام المهمة الحالية.

وظائف

يسرد هذا الأمر جميع عمليات الخلفية التي هي أطفال عملية shell الحالية.

الأشخاص ذوي الإعاقة

اطبع الدليل الحالي. قد يختلف الأمر builtin عن البرنامج الذي يحمل نفس الاسم لأن الأمر builtin يتذكر ما هو الدليل الحالي بدلاً من إعادة كتابته في كل مرة. هذا يجعلها أسرع. ومع ذلك ، إذا تمت إعادة تسمية الدليل الحالي ، سيستمر إصدار مضمن pwd في طباعة الاسم القديم للدليل.

قراءة [- p prompt ] [- r ] متغير ...

تطبع المطالبة إذا كان الخيار - p محددًا والمدخل القياسي هو مطراف. ثم يتم قراءة سطر من الإدخال القياسي. يتم حذف السطر الجديد الزائد من الخط ويتم تقسيم الخط كما هو موضح في القسم حول تقسيم الكلمة أعلاه ، ويتم تعيين القطع للمتغيرات بالترتيب. يجب تحديد متغير واحد على الأقل. إذا كان هناك قطع أكثر من المتغيرات ، يتم تعيين الأجزاء المتبقية (مع الأحرف في IFS التي فصلها) إلى المتغير الأخير. إذا كان هناك متغيرات أكثر من القطع ، يتم تعيين المتغيرات المتبقية في سلسلة فارغة. ستشير القراءة المضمنة إلى نجاح ما لم تتم مصادفة EOF على الإدخال ، وفي هذه الحالة يتم إرجاع الفشل.

بشكل افتراضي ، ما لم يتم تحديد الخيار - r ، يعمل الخط المائل العكسي `` \ '' كحرف هروب ، مما يؤدي إلى معالجة الحرف التالي حرفيًا. إذا كان الخط المائل العكسي متبوعًا بخط جديد ، فسيتم حذف الخط المائل العكسي والخط الجديد.

اسم readonly ...

readonly -p

يتم وضع علامة على الأسماء المحددة للقراءة فقط ، بحيث لا يمكن تعديلها أو إلغاء تعيينها لاحقًا. تسمح shell بتحديد قيمة المتغير في نفس الوقت الذي يتم تعليمه للقراءة فقط بالكتابة

اسم readonly = القيمة

مع عدم وجود وسائط يقوم الأمر readonly بسرد أسماء كل المتغيرات التي تقرأ فقط. مع الخيار - p المحدد سيتم تنسيق الإخراج بشكل مناسب للاستخدام غير التبادلي.

ضبط [{- خيارات | + خيارات | - أرجع ... ]

ينفذ الأمر set ثلاث وظائف مختلفة.

بدون أية وسائط ، تسرد قيم كل متغيرات shell.

إذا تم إعطاء الخيارات ، تقوم بتعيين علامات الخيار المحددة ، أو مسحها كما هو موضح في القسم المسمى Sx List List Processing.

الاستخدام الثالث لأمر set هو تعيين قيم المعلمات الموضعية shell إلى args المحددة. لتغيير المعلمات الموضعية دون تغيير أي خيارات ، استخدم `` - '' كوسيطة أولى لتعيينها. في حالة عدم وجود أي args ، سيؤدي الأمر set إلى مسح جميع المعلمات الموضعية (ما يعادل تنفيذ `` shift $ #. ''

قيمة متغيرة

يعين قيمة للمتغير. (بشكل عام ، من الأفضل كتابة المتغير = القيمة بدلاً من استخدام setvar setvar بغرض استخدامه في وظائف تقوم بتعيين قيم للمتغيرات التي يتم تمرير أسماءها كمعلمات).

تحول [ n ]

قم بتحويل المعلمات الموضعية n مرة. يعيّن التحويل قيمة $ 1 إلى قيمة $ 2 قيمة $ 2 إلى قيمة $ 3 وهكذا ، مما يؤدي إلى تقليل قيمة $ $ واحدة. إذا كان n أكبر من عدد المعلمات الموضعية ، فسيقوم shift بإصدار رسالة خطأ والخروج بحالة الإرجاع 2.

مرات

قم بطباعة المستخدم المتراكم وأوقات النظام للصدفة وللعمليات التي يتم تشغيلها من shell. حالة الإرجاع هي 0.

إشارة عمل فخ ...

تسبب shell لتحليل وتنفيذ الإجراء عند تلقي أي من الإشارات المحددة. يتم تحديد الإشارات برقم الإشارة. إذا كانت الإشارة تساوي 0 ، يتم تنفيذ الإجراء عند خروج الغلاف. قد يكون الإجراء خاليًا أو "-" - يؤدي السبب السابق إلى تجاهل الإشارة المحددة ويتسبب هذا الأخير في اتخاذ الإجراء الافتراضي. عندما تقوم shell بإيقاف تشغيل شريحة فرعية ، تقوم بإعادة تعيين الإشارات المحذوفة (ولكن غير الموجهة) إلى الإجراء الافتراضي. لا يؤثر أمر الملاءمة على الإشارات التي تم تجاهلها عند الدخول إلى الغلاف.

اكتب [ اسم ... ]

تفسير كل اسم كأمر وطباعة دقة البحث عن الأوامر. الحلول الممكنة هي: الكلمة الأساسية shell ، الاسم المستعار ، shell builtin ، الأمر ، الاسم المستعار المتعقّب وغير موجود. بالنسبة للأسماء المستعارة ، تتم طباعة توسيع الاسم المستعار ؛ للأوامر والأسماء المستعارة المتعقبة ، تتم طباعة المسار الكامل للأمر.

ulimit [- H -S ] [- a - tfdscmlpn [ value ]]

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

-H

ضبط أو الاستفسار عن الحدود الصلبة

-S

مجموعة أو الاستفسار عن حدود لينة. إذا لم يتم تحديد - H و - S ، فسيتم عرض الحد الميسر أو يتم تعيين كلا الحقلين. إذا تم تحديد كليهما ، فستكون النتيجة الأخيرة.

بعد ذلك يتم اختيار الحد الذي يتم استجوابه أو تعيينه ، وذلك بتحديد أي من هذه العلامات:

عرض جميع الحدود الحالية

-t

إظهار أو تعيين الحد الأقصى على وقت وحدة المعالجة المركزية (بالثواني)

-F

إظهار أو تعيين الحد على أكبر ملف يمكن إنشاؤه (في كتل 512 بايت)

إظهار أو تعيين الحد على حجم مقطع البيانات لعملية (بالكيلوبايت)

-s

إظهار أو تعيين الحد على حجم رصة عملية (بالكيلوبايت)

-c

عرض أو تعيين الحد على أكبر حجم تفريغ الأساسية التي يمكن إنتاجها (في كتل 512 بايت)

-m

إظهار أو تعيين الحد على إجمالي الذاكرة الفعلية التي يمكن استخدامها بواسطة عملية (بالكيلوبايت)

-l

إظهار أو تعيين الحد على مقدار الذاكرة التي يمكن لعملية تأمين القفل مع القفل (2) ( بالكيلوبايت )

-p

إظهار أو تعيين الحد على عدد العمليات التي يمكن أن يمتلكها هذا المستخدم في وقت واحد

-n

عرض أو تعيين الحد على ملفات الأرقام يمكن أن تكون العملية مفتوحة في وقت واحد

إذا لم يتم تحديد أي من هذه ، فسيكون الحد الأقصى لحجم الملف الذي يتم عرضه أو تعيينه. إذا تم تحديد القيمة ، يتم تعيين الحد إلى هذا الرقم ؛ وإلا يتم عرض الحد الحالي.

يمكن عرض حدود عملية عشوائية أو تعيينها باستخدام الأداة المساعدة sysctl (8).

umask [ قناع ]

قم بتعيين قيمة umask (انظر umask (2)) إلى القيمة الثمانية المحددة. إذا تم حذف الوسيطة ، فستتم طباعة قيمة umask.

unalias [- a ] [ اسم ]

إذا تم تحديد الاسم ، فإن shell يزيل هذا الاسم المستعار. إذا تم تحديد - a ، تتم إزالة جميع الأسماء المستعارة.

اسم غير مسمى ...

المتغيرات والوظائف المحددة غير محددة وغير مُصدرة. إذا كان اسم معين يتوافق مع متغير ووظيفة ، فإن كلا من المتغير والدالة غير معينين.

انتظر [ وظيفة ]

انتظر المهمة المحددة لاستكمال وإرجاع حالة الخروج من آخر عملية في المهمة. إذا تم حذف الوسيطة ، فانتظر اكتمال جميع المهام والعودة إلى حالة الخروج صفر.

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

عندما يتم استخدام sh بشكل تفاعلي من جهاز طرفي ، يمكن تحرير الأمر الحالي وتاريخ الأمر (راجع fc في Sx Builtins) باستخدام تحرير سطر الأوامر vi-mode. يستخدم هذا الوضع الأوامر ، الموضحة أدناه ، على غرار مجموعة فرعية من تلك الموضحة في الصفحة vi man. يتيح الأمر 'set' -o vi تحرير وضع vi ووضع sh في وضع الإدراج vi. مع تمكين vi-mode ، يمكن تبديل sh بين وضع الإدراج ووضع الأوامر. لم يتم وصف المحرر بالكامل هنا ، ولكن سيكون في وثيقة لاحقة. إنها مشابهة لـ vi: كتابة آج ESC سوف يرميك إلى الأمر command VI mode. سوف تصل إلى عقدين عائد أثناء وجوده في وضع الأوامر تمرير الخط إلى shell.

هام: استخدم الأمر man ( ٪ man ) لمعرفة كيفية استخدام أمر ما على جهاز الكمبيوتر الخاص بك.