سؤال

أريد أن أفهم استخدام xargs man في رمز raprion:

screen -t man /bin/sh -c 'xargs man || read'

بفضل Rampion: نحن لسنا بحاجة إلى القط!

لماذا نحتاج xargs في الأمر؟

انا افهم ال xargs -Part كما يلي

  1. القط لا شيء إلى xargs
  2. Xargs يجعل قائمة من مان

لقد تلقيت فكرة أن Xargs يجعل قائمة الأوامر. على سبيل المثال،

find . -type f -print0 | xargs -0 grep masi 

هو نفس قائمة الأوامر:

find fileA AND grep masi in it 
find fileB AND grep masi in it 
           and so on for fileC, fileD, ...
هل كانت مفيدة؟

المحلول

لا، أنا لا cat لا شيئ. أنا القط مهما كانت المدخلات التي أحصل عليها بعد تشغيل الأمر. cat في الواقع غريبة هنا، لذلك دعونا نتجاهلها.

xargs man ينتظر إدخال المستخدم. وهو ضروري. نظرا لأنك في البرنامج النصي أمسك بذلك، لا أستطيع لصقه في الحجة للإنسان حتى بعد إنشاء النافذة. لذلك يحتاج الأمر الذي يعمل في النافذة إلى الانتظار مني أن أعطيها شيئا ما، قبل أن يحاول تشغيل الإنسان.

إذا هربنا فقط screen /bin/sh -d 'man || read', ، سوف يشكو دائما "ما هي الصفحة اليدوية التي تريدها؟" منذ أن أخبرنا ذلك أبدا.

نصائح أخرى

تقوم Xargs بجمع الوسائط من Stdin وتنفذ الأمر المعطى بهذه الحجج.

لذلك فإن القط ينتظران شيئا ما يجب كتابته، ثم يقوم xargs بتشغيل رجل مع هذا الإدخال.

Xargs مفيد إذا كان لديك الكثير من الملفات معالجتها، فغالبا ما أستخدمها مع الإخراج من البحث. سيقوم Xargs بأشياء أكبر عدد ممكن من الحجج عند سطر الأوامر.
إنه رائع لفعل شيء مثل

find . -name '*.o' -print | xargs rm

ال cat الأمر لا يعمل على أي شيء؛ تعمل على إدخال قياسي، حتى قيل له أن المدخلات قد انتهت. كما تلاحظ المنحدر، cat الأمر غير ضروري هنا، لكنه يعمل على مدخلاته الضمنية (الإدخال القياسي)، وليس على أي شيء.

ال xargs يقرأ الأمر الإخراج من cat, وجماعات المعلومات في الحجج إلى man الأمر المحدد كوسيطة (فقط). عندما يصل إلى حد (قابل للتكوين في سطر الأوامر)، ستنفذ ذلك man أمر.

ال find ... -print0 | xargs -0 ... تتعامل المصطلح مع أسماء الملفات التي تحتوي على شخصيات محرجة مثل الفراغات والعلامات التبويب والخطوط الجديدة. ال find يطبع الأمر كل اسم ملف متبوعا ب ASCII NUL ('\0') هذا هو واحد من حرفين لا يمكن أن يظهر في اسم ملف بسيط - الوجود الأخرى "/" (الذي يظهر في أسماء المسار، بالطبع، ولكن ليس في أسماء الملفات البسيطة). لا يعادل مباشرة التسلسل الذي تقدمه؛ xargs مجموعات مجموعات أسماء الملفات في قائمة وسيطة واحدة، ما يصل إلى حد الحجم. إذا كانت الأسماء قصيرة بما يكفي (عادة ما تكون)، فستكون هناك إعدام أقل grep من هناك أسماء الملفات.

ملاحظة أيضا grep يطبع فقط اسم الملف حيث توجد المواد إذا كان لديها أكثر من ملف واحد للبحث - أو إذا كان يدعم خيارا حتى يطبع دائما أسماء الملفات ويستخدم الخيار:-H"هو امتداد جنو ل grep هذا يفعل هذا. الطريقة المحمولة للتأكد من أن أسماء الملفات تظهر دائما هي قائمة /dev/null كملف أول (هكذا "xargs grep something /dev/null') لا يستغرق وقتا طويلا للبحث /dev/null.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top