عندما نقوم بتشغيل أي أمر في bash Shell، فإنه يطبع بشكل عام مخرجات هذا الأمر إلى الوحدة الطرفية حتى نتمكن من قراءته على الفور. لكن bash يوفر أيضًا خيارًا 'لإعادة توجيه' مخرجات أي أمر bash إلى ملف سجل. يمكنه حفظ الإخراج في ملف نصي حتى نتمكن من مراجعته لاحقًا عند الحاجة إليه.
الأسلوب 1: كتابة الإخراج إلى ملف فقط
لكتابة مخرجات أوامر Bash إلى ملف، يمكننا استخدام علامة قوس الزاوية اليمنى (>) أو علامة الزاوية اليمنى المزدوجة (>>):
علامة قوس الزاوية اليمنى (>)
يتم استخدامه لكتابة إخراج أمر bash إلى ملف القرص. إذا لم يكن هناك ملف بالاسم المحدد، فإنه يقوم بإنشاء ملف جديد بنفس الاسم. إذا كان الملف موجودًا بالاسم المحدد، فسيتم الكتابة فوق محتوى الملف.
علامة الزاوية اليمنى المزدوجة (>>)
يتم استخدامه لكتابة مخرجات أوامر bash إلى ملف، وإلحاق المخرجات بمحتويات الملف الموجودة. إذا لم يكن الملف موجوداً، فإنه يقوم بإنشاء ملف جديد بالاسم المحدد.
من الناحية الفنية، يقوم كلا العاملين بإعادة توجيه 'stdout (الإخراج القياسي)' إلى ملف.
بطريقة بسيطة، عندما نكتب الملف لأول مرة ولا نريد أن تكون البيانات السابقة موجودة في الملف، يجب أن نستخدم علامة القوس الأيمن (>). سيتم الكتابة فوق المحتوى إذا كان موجودًا بالفعل في الملف. وفي البرنامج النصي الإضافي، قد نستخدم علامة الزاوية اليمنى المزدوجة (>>) لإلحاق البيانات بملف.
مثال
يتم استخدام الأمر 'ls' لطباعة جميع الملفات والمجلدات الموجودة في الدليل الحالي. ولكن عندما نقوم بتشغيل الأمر 'ls' بعلامة قوس الزاوية اليمنى (>)، فلن يقوم بطباعة قائمة الملفات والمجلدات على الشاشة. وسوف نقوم بحفظ الإخراج إلى الملف الذي نحدده به، أي كما هو موضح أدناه:
سكريبت باش
#!/bin/bash #Script to write the output into a file #Create output file, override if already present output=output_file.txt #Write data to a file ls > $output #Checking the content of the file gedit output_file.txt
انتاج |
كما هو موضح هنا، تتم إعادة توجيه إخراج الأمر 'ls' إلى ملف. لطباعة محتويات ملف إلى الوحدة الطرفية، يمكننا استخدام الأمر 'cat' بالشكل التالي:
سكريبت باش
#!/bin/bash #Script to write the output into a file #Create output file, override if already present output=output_file.txt #Write data to a file ls > $output #Printing the content of the file cat $output
انتاج |
إذا أردنا إعادة توجيه مخرجات أوامر متعددة إلى ملف واحد دون حذف البيانات المتاحة، فيمكننا استخدام عامل التشغيل >>. لنفترض أننا نريد إلحاق معلومات النظام بالملف المحدد، يمكننا القيام بذلك بالطريقة التالية:
سكريبت باش
#!/bin/bash #Script to write the output into a file #Create output file, override if already present output=output_file.txt #Write data to a file ls > $output #Appending the system information uname -a >> $output #Checking the content of the file gedit output_file.txt
انتاج |
وهنا يتم إلحاق نتيجة الأمر الثاني بنهاية الملف.
قال مادهوري
يمكننا تكرار هذه العملية عدة مرات لمواصلة إلحاق الإخراج بنهاية الملف.
الطريقة الثانية: طباعة المخرجات بشكل عادي وكتابتها في ملف
قد لا يحب بعض الأشخاص كتابة الإخراج إلى ملف باستخدام عوامل التشغيل > أو >>، حيث لن يكون هناك إخراج للأمر في الوحدة الطرفية. ولهذا السبب يتم استخدام الأمر 'tee'. يتم استخدام الأمر 'tee' لطباعة المدخلات التي يتلقاها على الشاشة. يمكنه حفظ الإخراج إلى ملف في نفس الوقت.
سكريبت باش
#!/bin/bash #Script to write the output into a file #Create output file, override if already present output=output_file.txt #Write data to a file ls | tee $output
انتاج |
سيؤدي هذا إلى تجاوز محتوى الملف، تمامًا مثل عامل التشغيل > ولكن أيضًا طباعة الإخراج على الشاشة.
إذا أردنا كتابة المخرجات إلى ملف دون إزالة محتويات الملف باستخدام الأمر Tee، فيمكننا استخدام النموذج التالي الذي سيطبع المخرجات أيضًا إلى الوحدة الطرفية:
سكريبت باش
#!/bin/bash #Script to write the output into a file #Create output file, override if already present output=output_file.txt echo '<<>>' | tee -a $output #Write data to a file ls | tee $output echo | tee -a $output #Append System Information to the file echo '<<>>' | tee -a $output uname | tee -a $output
انتاج |
لن يؤدي هذا إلى إلحاق الإخراج بنهاية الملف فحسب، بل سيؤدي أيضًا إلى طباعة الإخراج على الشاشة.