الأحد، 5 فبراير 2012

معنى و أستخدام 2>&1 في برامج BASH

بسم الله الرحمن الرحيم

يوجد في نظام لينكس ثلاث أنواع من الملفات الخاصة بالتعامل مع دفق البيانات وهي :

  • stdin : يرمز إلى سيل البيانات المستقبل في الطرفية "terminal" و يرمز له بالرقم 0 .
  • stdout : يرمز إلى البيانات التي يتم طباعتها في الطرفية "terminal"  و يرمز له بالرقم 1 .
  • sterr :  يرمز إلى رسائل الخطأ التي يتم طباعتها في الطرفية "terminal" و يرمز له بالرقم 2 . 
و الأن إلى هذا المثال الذي يستخدم "redirected" تحويل البيانات من برنامج إلى ملف :

ls > file.txt


في هذا المثال سيتم حفظ بيانات الأمر ls في الملف file.txt , و هذا اﻷمر مساوي للتالي :

ls 1> file.txt

يرمز الرقم 1 في "<1" إلى stdin , و سوف يقوم هذا الأمر بنفس عمل المثال الأول و لكن ماذا لو حدث خطأ في الأمر ls   :

ls not_exits/ 1> file.txt

في هذا المثال يرمز not_exists إلى مجلد لا يوجد في النظام , و في هذه الحالة لن يتم تحويل أي بيانات إلى الملف file.txt بل سيتم طباعة رسالة الخطأ في موجه الأوامر "terminal" و لكن ماذا لو غيرنا الأمر إلى التالي :

ls not_exits/ 2> file.txt


سيتم حفظ رسالة الخطأ في الملف file.txt , تذكر الرقم 2 في "<2" يرمز إلى الملف sterr الخاص برسائل الخطأ فقط , وسوف يتم تجاهل البيانات في حالة نجاح تنفيذ الأمر ls .

و لكن ماذا لو أردنا طباعة رسائل الخطأ و البيانات العادية من البرامج المستخدمة في السكريبت , سيتم أستعمال الأمر التالي :


ls not_exits/ > file.txt 2>&1



في هذه الحالة سيتم حفظ الأخطاء و البيانات في الملف file.txt , و هذا شرح الجملة "2>&1" :

  • 2 : الملف sterr الخاص برسائل الأخطاء
  • < : تحويل البيانات التي يتم طباعتها بواسطة sterr إلى الملف stdout .
  • & : توضع قبل أسم الملف 1 للتميز بين الملف stdout و أي ملف عادي بأسم "1" .
  • 1 : الملف stdout الخاص بطباعة الرسائل في الطرفيه "terminal " .

و في البداية " file.txt  < "  حددنا الملف الذي سيتم حفظ البيانات و الأخطاء , و هذا بكل بساطة أستخدام "2>&1"  .

 و اذا كان عندك أي تعديل أو استفسار فلا تتردد .
في أمان الله


ليست هناك تعليقات:

إرسال تعليق