OnWorks Linux و Windows Online WorkStations

الشعار

استضافة مجانية على الإنترنت لمحطات العمل

<السابق | المحتويات | التالي>

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

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

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



صدى "فو" | قراءة echo $ REPLY

صدى "فو" | قراءة echo $ REPLY


محتوى الرد المتغير فارغ دائمًا لأن اقرأ أمر exe- قطع في subshell ، ونسخته من الرد يتم تدميره عند انتهاء الطبقة الفرعية.

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

يتم التعبير عن استبدال العملية بطريقتين: بالنسبة للعمليات التي تنتج مخرجات قياسية:

<(قائمة)

أو للعمليات التي تستوعب مدخلات قياسية:

>(قائمة)

أين قائمة هي قائمة الأوامر.

لحل مشكلتنا مع اقرأ، يمكننا استخدام عملية الاستبدال مثل هذا:


قراءة <<(echo "foo") echo $ REPLY

قراءة <<(echo "foo") echo $ REPLY


يسمح لنا استبدال العملية بمعالجة ناتج المجموعة الفرعية كملف عادي لأغراض إعادة التوجيه. في الواقع ، نظرًا لأنه شكل من أشكال التوسع ، يمكننا فحص قيمته الحقيقية:



[me @ linuxbox ~] $ echo <(echo "foo")

/ dev / fd / 63

[me @ linuxbox ~] $ echo <(echo "foo")

/ dev / fd / 63


باستخدام صدى لعرض نتيجة التوسيع ، نرى أن ناتج المجموعة الفرعية يتم توفيره بواسطة ملف يسمى / dev / fd / 63.

غالبًا ما يستخدم استبدال العملية مع حلقات تحتوي على اقرأ. هنا مثال على ملف

حلقة قراءة تعالج محتويات قائمة دليل تم إنشاؤها بواسطة مجموعة فرعية:


#! / بن / باش


# pro-sub: عرض استبدال العملية


أثناء قراءة Attr links owner size group size date time filename ؛ هل القط << - EOF

اسم الملف: $ filename الحجم: $ size

المالك: $ owner

المجموعة: $ group تم التعديل: $ date $ time الروابط: $ links السمات: $ attr


EOF

تم <<(ls -l | tail -n +2)

#! / بن / باش


# pro-sub: عرض استبدال العملية


أثناء قراءة Attr links owner size group size date time filename ؛ هل القط << - EOF

اسم الملف: $ filename الحجم: $ size

المالك: $ owner

المجموعة: $ group تم التعديل: $ date $ time الروابط: $ links السمات: $ attr


EOF

تم <<(ls -l | tail -n +2)


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

عند تنفيذه ، ينتج النص مثل هذا:



[me @ linuxbox ~] $ المؤيد | رئيس ن 20

اسم الملف: العناوين.الديف الحجم: 14540

المالك: أنا

المجموعة: لي

Modified: 2009-04-02 11:12

[me @ linuxbox ~] $ المؤيد | رئيس ن 20

اسم الملف: العناوين.الديف الحجم: 14540

المالك: أنا

المجموعة: لي

Modified: 2009-04-02 11:12


الروابط:

1

الروابط:


السمات: -rw-r - r--


اسم الملف: bin

الحجم: 4096

المالك: أنا

المجموعة: لي

Modified: 2009-07-10 07:31

الروابط: 2

السمات: drwxr-xr-x


اسم الملف: bookmarks.html الحجم: 394213

المالك: أنا

المجموعة: لي

السمات: -rw-r - r--


اسم الملف: bin

الحجم: 4096

المالك: أنا

المجموعة: لي

Modified: 2009-07-10 07:31

الروابط: 2

السمات: drwxr-xr-x


اسم الملف: bookmarks.html الحجم: 394213

المالك: أنا

المجموعة: لي


صورة

أفضل الحوسبة السحابية لنظام التشغيل في OnWorks: