الجمعة الصالة: ستاند ستريم

مرحبًا بكم في جمعة أخرى ...

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

تيار قياسي

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

رسم تخطيطي سريع على التدفقات القياسية.

رسم تخطيطي سريع على التدفقات القياسية.

اتصالات الإدخال / الإخراج الثلاثة هي: ستدين المدخلات القياسية, المعياري الإخراج القياسي, ستدير خطأ تقليدي.

stdin: الإدخال القياسي

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

يعد الواصف مؤشرًا للوصول - في هذه الحالة - إلى قنوات الإدخال والإخراج. هذه هي قيم int ، عادةً ما تكون 0 و 1 و 2.

مثال على stdin سيكون:

فرز <القائمة

يأخذ كل المعلومات الموجودة في القائمة - في هذه الحالة الأرقام المكتوبة بشكل عشوائي - وعند إعادة توجيه الملف إلى الأمر ls ، فإنه يفرز القائمة الرقمية أبجديًا. في هذا المثال الإشارات ضمنية.

stdout: الإخراج القياسي

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

الآن سأحاول إنشاء مثيل stdin و stdout بنص مكتوب بلغة bash ، وذلك ببساطة لأنني أحب bash hahaha. 🙂

test.sh

#! / bin / bash if [-t 0] ؛ ثم صدى "أنت تستخدم stdout" elif [-t 1] ؛ ثم صدى "أنت تستخدم stdin" وإلا صدى "خطأ وحشي" fi

الآن لقطة شاشة توضح كيفية استخدام البرنامج النصي. عند إعادة التوجيه أو استخدام أنبوب مع استخدام البرنامج النصي اختبار -t لمعرفة ما إذا كان يتم تنفيذ البرنامج النصي stdout فقط ، وإذا لم يكن كذلك فمن الواضح أنه stdin.

اختبار bash.sh ls | bash test.sh bash test.sh </ etc / passwd
السيناريو المعني ومخرجاته ...

السيناريو المعني ومخرجاته ...

تذكر تعديل الأمر والممارسة حتى تتعلم.

stderr: خطأ معياري

الخطأ المعياري هو الطريقة التي تعرض بها البرامج الأخطاء أو التشخيص. يتم تمثيله بالواصف 2.

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

ls> info.txt

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

بدلاً من ذلك ، إذا استخدمنا 2> للإشارة إلى حفظ stderr في الملف:

ls foo 2> info.txt

الآن سيحفظ معلومات الخطأ في الملف النصي.

معظم قذيفة السماح بتخزين stderr و stdout في أمر واحد مع &> حيث Foo هو دليل غير موجود

ls التنزيلات Foo &> info.txt

سيحتوي هذا الملف على معلومات الخطأ عند تنفيذ الأمر ls في Foo وسيدرج الدلائل ضمن التنزيلات.

وأخيرًا ، ماذا يفعل ذلك الشهير 2> & 1?

بسيطة ، وإعادة توجيه stderr إلى stdout. يعني ذلك & في منتصف> و 1 أنه سيعيد التوجيه إلى stdout. إذا لم يكن موجودًا ، فسيكون شيئًا مثل ... "إعادة توجيه الخطأ إلى الملف 1".

وبهذا يمكن إعادة توجيه:

  • stdout إلى ملف
  • stderr إلى ملف
  • stdout إلى stderr
  • stderr إلى stdout
  • stderr و stdout إلى ملف
  • من بين أمور أخرى

هذا كل شيء لشعب اليوم. نقرأ ونشكرك على مرورك. 😀


اترك تعليقك

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها ب *

*

*

  1. المسؤول عن البيانات: ميغيل أنخيل جاتون
  2. الغرض من البيانات: التحكم في الرسائل الاقتحامية ، وإدارة التعليقات.
  3. الشرعية: موافقتك
  4. توصيل البيانات: لن يتم إرسال البيانات إلى أطراف ثالثة إلا بموجب التزام قانوني.
  5. تخزين البيانات: قاعدة البيانات التي تستضيفها شركة Occentus Networks (الاتحاد الأوروبي)
  6. الحقوق: يمكنك في أي وقت تقييد معلوماتك واستعادتها وحذفها.

  1.   إليوتيمي 3000 قال

    مثير للإعجاب. بفضل البرامج التعليمية الخاصة بك ، أنا أحب Bash أكثر من ذلك بكثير.

  2.   كوينسي ماجو قال

    عزيزي ، شيق ، لكن لديك خطأ في السطر التالي:

    "وعند إعادة توجيه الملف إلى الأمر ls" ، يجب أن يكون "وعند إعادة توجيه الملف إلى أمر الفرز".

    تحية.

  3.   ميغيل قال

    يوجد خطأ في بداية النص ، عندما تشير إلى الأمر "ls" ، يجب أن يكون "Sort":
    "خذ جميع المعلومات الموجودة في القائمة - في هذه الحالة الأرقام المكتوبة عشوائيًا - وأعد توجيه الملف إلى الأمر ls (هنا سيكون نوعًا)"

    تحياتي وشكرًا لتقاسم عملك

  4.   رودر قال

    يعد هذا أمرًا رائعًا بالنسبة إلى cron ، حيث تريد مسح الإخراج (/ dev / null) ولكن يتم تخزين الأخطاء في الملفات. أيضًا ، عندما أفعل ذلك ، عادةً ما أستخدم أمر التاريخ لتحديد وقت الفشل بالضبط.

    يمتلك Bash (sh) هذه الأدوات التي طورتها فلسفة Unix "افعل شيئًا واحدًا وافعله جيدًا"

  5.   لولو قال

    حسنًا ، لم أجد شيئًا

    1.    صوت قال

      هاها حسنًا يتم شرحه جيدًا ، ما الذي لم تفهمه؟