عند استخدام أمر “ls” في سكريبت الشل لتوجيه النتائج إلى ملف نصي باستخدام التوجيه “>”، فإنه يكتب فقط اسم الملف الذي يحتوي على النتائج في الملف النصي، ولا يكتب النتائج الفعلية (أي اسماء الملفات).
في سكريبتك، عندما تقوم بتشغيل الأمر:
bashls -1r rrr* > /tmp/memo.txt
يقوم السكريبت بتشغيل “ls” مع الخيارات “-1r” (لإظهار كل ملف في سطر منفصل وترتيبهم بالترتيب العكسي)، ثم يقوم بتحويل النتائج إلى الملف “/tmp/memo.txt”.
لكن المشكلة هي أن “ls” لا يكتب أسماء الملفات إلى الملف “/tmp/memo.txt”، بل يكتب فقط اسم الملف “/tmp/memo.txt” نفسه. هذا هو السبب في ظهور “/tmp/memo.txt” فقط في الملف النصي.
لحل هذه المشكلة وكتابة أسماء جميع الملفات المطابقة إلى الملف النصي، يمكنك استخدام الحل الآتي:
bash#!/bin/bash
ls -1r rrr* >> /tmp/memo.txt
باستخدام “>>” بدلاً من “>”, يتم إضافة النتائج إلى نهاية الملف “/tmp/memo.txt” بدلاً من استبداله. وبالتالي، سيتم إضافة أسماء جميع الملفات المطابقة إلى الملف النصي بدلاً من استبدالها بالاسم “/tmp/memo.txt” فقط.
بعد تشغيل السكريبت، يمكنك تنفيذ:
bashcat /tmp/memo.txt
سترى جميع أسماء الملفات المطابقة مثلما توقعت.
المزيد من المعلومات
بالطبع، دعني أوضح المزيد من المعلومات لمساعدتك في فهم السياق بشكل أفضل.
عندما تستخدم أمر “ls” في سكريبت الشل، فإن الأمر الذي تمر به يقوم بعرض قائمة بأسماء الملفات المطابقة للنمط الذي حددته (في حالتك، “rrr*”). ومن ثم، يتم توجيه هذه القائمة إلى الملف الذي حددته باستخدام علامة التوجيه “>”.
باستخدام “>”، يتم استبدال محتوى الملف الموجه إليه بالنتائج التي تم إنشاؤها من قبل “ls”. لكن في حالتك، تم استبدال المحتوى السابق للملف “/tmp/memo.txt” بالاسم “/tmp/memo.txt” نفسه.
وهذا يعني أن النتيجة النهائية هي ملف نصي يحتوي فقط على اسم الملف “/tmp/memo.txt”، وليس على أسماء الملفات الفعلية التي تمثل النتائج المطلوبة.
لحل هذه المشكلة، يمكنك استخدام علامة التوجيه “>>” بدلاً من “>”, والتي تضيف النتائج إلى نهاية الملف بدلاً من استبداله. وبالتالي، ستتم إضافة أسماء جميع الملفات المطابقة إلى الملف النصي بدلاً من استبدالها بالاسم “/tmp/memo.txt” فقط.
أيضًا، يمكنك استخدام أمر “cat” لعرض محتوى الملف “/tmp/memo.txt” بعد تنفيذ السكريبت، وسترى جميع أسماء الملفات المطابقة كما توقعت.
بهذه الطريقة، يمكنك الحصول على النتائج المرجوة وكتابة جميع أسماء الملفات المطابقة إلى الملف النصي بشكل صحيح وكامل.