طريقة تنفيذ أمر على كل سطر من أسطر المحتوى الخارج من أمر إلى أمر آخر في التيرمينال
كيف تنفذ أمر معين على كل سطر من سطور ناتج أمر آخر؟
أو
كيف تمرر النصوص سطر سطر في التيرمينال؟
السؤالان هما نفس الفكرة.
فيه طريقتين لتنفيذ الموضوع ده.
استخدام الحلقة التكرارية while 🔗
هذه طريقة معتادة بسبب سهولة فهمها وبساطتها. الاستخدام بهذا الشكل.
command | while read line; do
# Perform some action on each line stored in the variable "$line"
your_command "$line"
done
command
: هذا هو الأمر الذي يعطي النصوص التي سوف نتعامل معها سطر سطر.while read line
: هذه الحلقة التكرارية تأخذ المدخلات من stdin سطر سطر وهذه المدخلات تم تمريرها عبر الـ pipe من الأمر السابق.$line
: هذا هو الذي يحمل قيمة السطر الحالي الذي يتم تنفيذ الأمر عليه داخل الحلقة التكرارية.your_command "$line"
: هذا هو الأمر الذي يتم تنفيذه على كل سطر من الأسطر. استبدل your_command بالأمر الفعلي الذي تريد تنفيذه على كل سطر.
هذا السكربت بشكل مركز ومضغوط ودون تجميل.
command | while read -r line; do command "$line"; done
بإستخدام xargs مع الاختيار -n1 🔗
أداة xargs
قوية جداً في التعامل مع الاختيارات الموجودة في التيرمينال والمخرجات والمدخلات. الاختيار -n1
معناه أن الـ xargs
ستقوم بتنفيذ الأمر التالي على النصوص المدخلة للأمر سطر تلو الآخر. وهذه طريقة كتابة السكربت.
command | xargs -n1 your_command
- هذه الطريقة تشبة الطريقة السابقة (الحلقة التكرارية) ولكنها مختصرة أكثر.
- خلي بالك؛ في بعض الحدود والتحديات في استخدام xargs ، لذلك اقرا المرجع بتاعها عشان تفهم كل التفاصيل (the man page) (أو أكتب الأمر ده على التيرمينال هيظهرلك المرجع بتاعها
man xargs
) بالذات لو عندك حالة استخدام معقدة.
لو كنت تريد المرور على كل سطر من سطور محتوى ملف نصي ، استخدم الأمر التالي.
cat file... | xargs -n1 command
يُمكنك التخلص من علامة التمرير (الپايپ pipe |
) عن طريق استخدام طريق توجيه المخرجات. وهذا هو السكربت بعد التخلص من البايب.
<file xargs -n1 command
أمثلة 🔗
كل تستعرض كل صفحات tldr الموجودة ؟ 🔗
هذه هي خطوات كتابة السكربت.
- معرفة عناوين كل الصفحات الموجودة في tldr
- تمرير (pipe) هذه العناوين إلى أداة/برنامج xargs
- استلام العناوين عنوان عنوان (سطر سطر)
- تنفيذ الأمر tldr على كل سطر (كل عنوان) لعرض الخرج (المخرجات) في التيرمينال لكل عنوان فيهم
هذا هو السكربت.
tldr -l | xargs -n1 tldr
لاحظ: النتائج كبيرة جداً جداً وكثيرة.
tldr -l
يخرج قائمة ضخمة جداً من العناوين. كل عنوان في سطر.| xargs -n1 tldr
يمرر المخرجات من الأمر السابق إلى الأمر التالي سطر سطر ليتم تنفيذ الأمرtldr
على كل سطر على حِدا.
يُمكننا تنفيذ نفس الفكرة بإستخدام حلقة while التكرارية. وهذه هي الطريقة.
tldr -l | while read -r line; do tldr "$line"; done
يُمكنك تحسين شكل السكربت لتسهيل قراءته.
tldr -l | while read -r line; do
tldr "$line";
done
أتمنى أن تكون قد استفدت من الموضوع ، إن كنت تعرف أي شخص يُمكنه الإستفادة من هذه المعلومات، ارسل له رابط هذا المقال. إن أردت معرفة الموضوعات الجديدة بعد نشرها مباشرةً على موقع أبانوب حنا ، تابعني على يوتيوب و تيليجرام ، و فيسبوك ، و واتساب .