سؤال
أريد أن أفهم استخدام xargs man
في رمز raprion:
screen -t man /bin/sh -c 'xargs man || read'
بفضل Rampion: نحن لسنا بحاجة إلى القط!
لماذا نحتاج xargs
في الأمر؟
انا افهم ال xargs
-Part كما يلي
- القط لا شيء إلى xargs
- 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
.