مرحبًا بكم في جمعة أخرى ...
حان الوقت للتعرف على جزء صغير من المحطة. بعد الكثير من التفكير قررت إنشاء منشور حول تيارات قياسية؛ على الرغم من أنه سيكون سطحيًا ، أعتقد أنه شيء يجب أن يعرفه الجميع.
تيار قياسي
تيار قياسي وهي مكونة من عدة قنوات اتصال بين المستخدم والمحطة. تعرض "قنوات" الإدخال / الإخراج هذه المعلومات أو تلتقطها عند تنفيذ الأمر.
اتصالات الإدخال / الإخراج الثلاثة هي: ستدين المدخلات القياسية, المعياري الإخراج القياسي, ستدير خطأ تقليدي.
stdin: الإدخال القياسي
الإدخال القياسي هو الطريقة التي نلتقط بها المعلومات من أحد الأوامر ، إما من خلال الأنابيب أو إعادة التوجيه أو لوحة المفاتيح ، إلخ. نحدده باستخدام واصف الملف 0.
مثال على 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 إلى ملف
- من بين أمور أخرى
هذا كل شيء لشعب اليوم. نقرأ ونشكرك على مرورك. 😀
مثير للإعجاب. بفضل البرامج التعليمية الخاصة بك ، أنا أحب Bash أكثر من ذلك بكثير.
عزيزي ، شيق ، لكن لديك خطأ في السطر التالي:
"وعند إعادة توجيه الملف إلى الأمر ls" ، يجب أن يكون "وعند إعادة توجيه الملف إلى أمر الفرز".
تحية.
يوجد خطأ في بداية النص ، عندما تشير إلى الأمر "ls" ، يجب أن يكون "Sort":
"خذ جميع المعلومات الموجودة في القائمة - في هذه الحالة الأرقام المكتوبة عشوائيًا - وأعد توجيه الملف إلى الأمر ls (هنا سيكون نوعًا)"
تحياتي وشكرًا لتقاسم عملك
يعد هذا أمرًا رائعًا بالنسبة إلى cron ، حيث تريد مسح الإخراج (/ dev / null) ولكن يتم تخزين الأخطاء في الملفات. أيضًا ، عندما أفعل ذلك ، عادةً ما أستخدم أمر التاريخ لتحديد وقت الفشل بالضبط.
يمتلك Bash (sh) هذه الأدوات التي طورتها فلسفة Unix "افعل شيئًا واحدًا وافعله جيدًا"
حسنًا ، لم أجد شيئًا
هاها حسنًا يتم شرحه جيدًا ، ما الذي لم تفهمه؟