XARGS(1)

الاسم
xargs - بناء وتنفيذ سطور الأوامر من الدخل القياسي

موجز
xargs [options] [command [initial-arguments]]

الوصف
تُوثق صفحة الدليل هذه نسخة GNU من xargs. يقرأ xargs العناصر من الدخل القياسي، بفواصل الفراغات (التي يمكن حمايتها بعلامات اقتباس مزدوجة أو مفردة أو مائلة خلفية) أو سطور جديدة، ويُنفذ الـ command (الـ echo هو المبدئي) مرة واحدة أو أكثر مع أي initial-arguments متبوعة بالعناصر المقروءة من الدخل القياسي. تُتجاهل السطور الفارغة في الدخل القياسي.

يُبنى سطر الأوامر للـ command حتى يصل إلى الحد الذي يُحدده النظام (ما لم تُستخدم الخيارات -n و -L). سيُستدعى الـ command المحدد بالعدد اللازم من المرات لاستنفاد قائمة عناصر الدخل. وبوجه عام، سيكون عدد استدعاءات الـ command أقل بكثير من عدد عناصر الدخل. سيكون لهذا عادة فوائد كبيرة في الأداء. يمكن تنفيذ بعض الأوامر بالتوازي بشكل مفيد أيضًا؛ انظر الخيار -P.

نظرًا لأن أسماء ملفات Unix قد تحتوي على فراغات وسطور جديدة، فإن هذا السلوك المبدئي غالبًا ما يكون إشكاليًا؛ إذ تُعالج أسماء الملفات التي تحتوي على فراغات و/أو سطور جديدة بشكل غير صحيح بواسطة xargs. في هذه الحالات، من الأفضل استخدام الخيار -0، الذي يمنع مثل هذه المشاكل. عند استخدام هذا الخيار، ستحتاج إلى التأكد من أن البرنامج الذي يُنتج دخل xargs يستخدم أيضًا محرف عدم (null) كفاصل. إذا كان ذلك البرنامج هو GNU find على سبيل المثال، فإن الخيار -print0 يفعل ذلك نيابة عنك.

إذا انتهى أي استدعاء للأمر بحالة 255، سيتوقف xargs فورًا دون قراءة أي دخل إضافي. ويُصدر إشعار خطأ على stderr عند حدوث ذلك.

الخيارات

-0, --null
    تُنهى عناصر الدخل بمحرف عدم بدلًا من الفراغات، ولا تكون علامات الاقتباس والمائلة الخلفية خاصة (يُؤخذ كل محرف حرفيًا). يُعطل سلسلة نهاية الملف، التي تُعامل مثل أي معامل آخر. مفيد عندما تحتوي عناصر الدخل على فراغات أو علامات اقتباس أو مائلات خلفية. يُنتج خيار GNU find -print0 دخلًا مناسبًا لهذا الوضع.

-a file, --arg-file=file
    اقرأ العناصر من file بدلًا من الدخل القياسي. إذا استخدمت هذا الخيار، يبقى stdin دون تغيير عند تشغيل الأوامر. بخلاف ذلك، يُعاد توجيه stdin من /dev/null.

--delimiter=delim, -d delim
    تُنهى عناصر الدخل بالمحرف المحدد. قد يكون الفاصل المحدد محرفًا واحدًا، أو محرف هروب بنمط C مثل \n، أو رمز هروب ثماني أو ست عشري. تُفهم أكواد الهروب الثمانية والست عشرية كما في أمر printf. المحارف متعددة البايتات غير مدعومة. عند معالجة الدخل، لا تكون علامات الاقتباس والمائلة الخلفية خاصة؛ إذ يُؤخذ كل محرف في الدخل حرفيًا. يُعطل الخيار -d أي سلسلة نهاية ملف، وتُعامل كأي معامل آخر. يمكنك استخدام هذا الخيار عندما يتكون الدخل من عناصر مفصولة بسطور جديدة ببساطة، رغم أنه من الأفضل دائمًا تصميم برنامجك لاستخدام --null حيثما أمكن ذلك.

-E eof-str
    اضبط سلسلة نهاية الملف على eof-str. إذا ظهرت سلسلة نهاية الملف كسطر دخل، سيُتجاهل ما تبقى من الدخل. إذا لم يُستخدم -E ولا -e، فلن تُستخدم أي سلسلة نهاية ملف.

-e[eof-str], --eof[=eof-str]
    هذا الخيار مرادف للخيار -E. استخدم -E بدلًا منه، لأنه متوافق مع POSIX بينما هذا الخيار ليس كذلك. إذا حُذفت eof-str، فلن توجد سلسلة نهاية ملف. إذا لم يُستخدم -E ولا -e، فلن تُستخدم أي سلسلة نهاية ملف.

-I replace-str
    استبدل حالات ظهور replace-str في الـ initial-arguments بالأسماء المقروءة من الدخل القياسي. كما أن الفراغات غير المقتبسة لا تنهي عناصر الدخل؛ وبدلًا من ذلك يكون الفاصل هو محرف السطر الجديد. يتضمن -x و -L 1.

-i[replace-str], --replace[=replace-str]
    هذا الخيار مرادف لـ -Ireplace-str إذا حُددت replace-str. إذا غاب معامل replace-str، يكون التأثير مماثلًا لـ -I{}. الخيار -i مهجور؛ استخدم -I بدلًا منه.

-L max-lines
    استخدم max-lines من سطور الدخل غير الفارغة كحد أقصى لكل سطر أوامر. تؤدي الفراغات اللاحقة إلى استمرار سطر الدخل منطقيًا في سطر الدخل التالي. يتضمن -x.

-l[max-lines], --max-lines[=max-lines]
    مرادف للخيار -L. وبخلاف -L، فإن معامل max-lines اختياري. إذا لم يُحدد max-lines، فإنه يُفترض واحدًا. الخيار -l مهجور لأن معيار POSIX يحدد -L بدلًا منه.

-n max-args, --max-args=max-args
    استخدم max-args من المعاملات كحد أقصى لكل سطر أوامر. سيُستخدم عدد أقل من max-args إذا جرى تجاوز الحجم (انظر الخيار -s)، ما لم يُعطَ الخيار -x، وفي هذه الحالة سيخرج xargs.

-P max-procs, --max-procs=max-procs
    شغل ما يصل إلى max-procs من العمليات في وقت واحد؛ المبدئي هو 1. إذا كان max-procs هو 0، فسيقوم xargs بتشغيل أكبر عدد ممكن من العمليات في وقت واحد. استخدم الخيار -n أو الخيار -L مع -P؛ وإلا فمن المرجح تنفيذ exec واحد فقط. أثناء تشغيل xargs، يمكنك إرسال إشارة SIGUSR1 لعمليته لزيادة عدد الأوامر التي تعمل بالتزامن، أو SIGUSR2 لتقليل العدد. لا يمكنك زيادته فوق الحد الذي يحدده التنفيذ (الذي يظهر باستخدام --show-limits). لا يمكنك تقليله إلى أقل من 1. لا ينهي xargs أوامره أبدًا؛ فعندما يُطلب منه التقليل، فإنه ينتظر ببساطة انتهاء أكثر من أمر موجود قبل بدء أمر آخر. ينتظر xargs دائمًا خروج جميع العمليات الوليدة قبل أن يخرج هو نفسه (لكن انظر BUGS).

    إذا لم تستخدم الخيار -P، فلن يتعامل xargs مع إشارتي SIGUSR1 و SIGUSR2، مما يعني أنهما ستنهيان البرنامج (ما لم تكن قد حُجبت في العملية الأب قبل بدء xargs).

    يرجى ملاحظة أن الأمر متروك للعمليات المستدعاة لإدارة الوصول المتوازي إلى الموارد المشتركة بشكل صحيح. على سبيل المثال، إذا حاولت أكثر من عملية منها الطباعة على stdout، فسيُنتج الخرج بترتيب غير محدد (ومن المرجح جدًا أن يختلط) ما لم تتعاون العمليات بطريقة ما لمنع ذلك. استخدام نوع من مخطط القفل هو إحدى الطرق لمنع مثل هذه المشاكل. بشكل عام، سيساعد استخدام مخطط القفل في ضمان الخرج الصحيح ولكنه سيقلل من الأداء. إذا كنت لا ترغب في تحمل فرق الأداء، فقم ببساطة بترتيب كل عملية لإنتاج ملف خرج منفصل (أو استخدام موارد منفصلة بطريقة أخرى).

-o, --open-tty
    أعد فتح stdin كـ /dev/tty في العملية الوليدة قبل تنفيذ الأمر. هذا مفيد إذا كنت تريد أن يقوم xargs بتشغيل تطبيق تفاعلي.

-p, --interactive
    اسأل المستخدم عما إذا كان سيتم تشغيل كل سطر أوامر واقرأ سطرًا من الطرفية. لا تشغل سطر الأوامر إلا إذا بدأت الاستجابة بـ `y' أو `Y'. يتضمن -t.

--process-slot-var=name
    اضبط متغير البيئة name على قيمة فريدة في كل عملية وليدة جارية. تُعاد استخدام القيم بمجرد خروج العمليات الوليدة. يمكن استخدام هذا في مخطط توزيع حمل بدائي، على سبيل المثال.

-r, --no-run-if-empty
    إذا لم يحتوي الدخل القياسي على أي محارف غير فارغة، فلا تشغل الأمر. عادةً، يتم تشغيل الأمر مرة واحدة حتى لو لم يكن هناك دخل. هذا الخيار هو امتداد لـ GNU.

-s max-chars, --max-chars=max-chars
    استخدم على الأكثر max-chars من الرموز في كل سطر أمر، بما في ذلك الأمر والوسائط الأولية والمحارف الصفرية النهائية في نهاية سلاسل الوسائط. أكبر قيمة مسموح بها تعتمد على النظام، وتُحسب على أنها الحد الأقصى لطول الوسائط الخاص بالدالة exec، مطروحاً منه حجم متغيرات البيئة، ومطروحاً منه 2048 بايت كـ "هامش أمان". إذا كانت هذه القيمة أكبر من 128 كيلوبايت، تُستخدم 128 كيلوبايت كقيمة مبدئية؛ وبخلاف ذلك، تكون القيمة المبدئية هي الحد الأقصى. الكيلوبايت الواحد (1 KiB) يساوي 1024 بايت. يتكيف xargs آليًا مع القيود الأكثر صرامة.

--show-limits
    اعرض الحدود على طول سطر الأوامر التي يفرضها نظام التشغيل، واختيار xargs لحجم المخزن المؤقت والخيار -s. مرر الدخل من /dev/null (وربما حدد --no-run-if-empty) إذا كنت لا تريد أن يفعل xargs أي شيء.

-t, --verbose
    اطبع سطر الأوامر على خرج الخطأ القياسي قبل تنفيذه.

-x, --exit
    اخرج إذا جرى تجاوز الحجم (انظر الخيار -s).

--  افصل قائمة الخيارات. تُعامل المعاملات اللاحقة، إن وجدت، كأطراف تشغيل حتى لو بدأت بـ -. على سبيل المثال، xargs -- --help يُشغل الأمر --help (الموجود في PATH) بدلًا من طباعة نص الاستخدام، و xargs -- --mycommand يُشغل الأمر --mycommand بدلًا من رفضه كخيار غير معروف.

--help
    اطبع ملخصًا لخيارات xargs واخرج.

--version
    اطبع رقم إصدار xargs واخرج.

الخيارات --max-lines (-L، -l)، و --replace (-I، -i) و --max-args (-n) متنافية تبادليًا. إذا حُدد بعضها في نفس الوقت، فسيستخدم xargs عمومًا الخيار المحدد آخِرًا في سطر الأوامر، أي أنه سيعيد تعيين قيمة الخيار المتعارض (المعطى سابقًا) إلى قيمته المبدئية. بالإضافة إلى ذلك، سيصدر xargs إشعار تحذير تشخيصي على stderr. الاستثناء من هذه القاعدة هو أن قيمة max-args الخاصة 1 ('-n1') جرى تجاهلها بعد الخيار --replace وأسماءه المستعارة -I و -i، لأنها لا تتعارض فعليًا.

أمثلة
find /tmp -name core -type f -print | xargs /bin/rm -f

ابحث عن الملفات المسماة core في أو تحت الدليل /tmp واحذفها. لاحظ أن هذا سيعمل بشكل غير صحيح إذا كان هناك أي أسماء ملفات تحتوي على سطور جديدة أو مسافات.

find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f

ابحث عن الملفات المسماة core في أو تحت الدليل /tmp واحذفها، مع معالجة أسماء الملفات بطريقة تضمن التعامل الصحيح مع أسماء الملفات أو الأدلة التي تحتوي على مسافات أو سطور جديدة.

find /tmp -depth -name core -type f -delete

ابحث عن الملفات المسماة core في أو تحت الدليل /tmp واحذفها، ولكن بكفاءة أكبر من المثال السابق (لأننا نتجنب الحاجة إلى استخدام fork(2) و exec(2) لإطلاق rm ولا نحتاج لعملية xargs إضافية).

cut -d: -f1 < /etc/passwd | sort | xargs echo

يُنشئ قائمة مدمجة بجميع المستخدمين على النظام.

حالة الخروج
يخرج xargs بالحالات التالية:

    0   في حال نجاحه

    123 إذا انتهى أي استدعاء للأمر بحالة بين 1–125

    124 إذا انتهى الأمر بحالة 255

    125 إذا قُتل الأمر بإشارة

    126 إذا تعذر تشغيل الأمر

    127 إذا لم يُعثر على الأمر

    1   في حال وقوع خطأ آخر.

تُستخدم أكواد الخروج الأكبر من 128 بواسطة الصدفة للإشارة إلى أن البرنامج مات بسبب إشارة قاتلة.

المطابقة للمعايير
بدءًا من إصدار GNU xargs 4.2.9، السلوك المبدئي لـ xargs هو عدم وجود علامة نهاية ملف منطقية. يسمح POSIX (IEEE Std 1003.1، إصدار 2004) بذلك.

يظهر الخياران -l و -i في نسخة 1997 من معيار POSIX، لكنهما لا يظهران في نسخة 2004 من المعيار. لذلك يجب عليك استخدام -L و -I بدلًا منهما، على التوالي.

الخيار -o هو امتداد لمعيار POSIX لتحقيق توافق أفضل مع BSD.

يسمح معيار POSIX للتنفيذات بأن يكون لها حد على حجم المعاملات لدوال exec. يمكن أن يكون هذا الحد منخفضًا حتى 4096 بايت بما في ذلك حجم البيئة. لكي تكون النصوص البرمجية محمولة، يجب ألا تعتمد على قيمة أكبر. ومع ذلك، لا أعرف أي تنفيذ يكون حده الفعلي بهذا الصغر. يمكن استخدام الخيار --show-limits لاكتشاف الحدود الفعلية السارية على النظام الحالي.

في إصدارات xargs حتى الإصدار 4.9.0 (مضمنًا)، لم تكن SIGUSR1 و SIGUSR2 تتسبب في إنهاء xargs حتى لو لم يُستخدم الخيار -P.

التاريخ

اخترع Herb Gellis برنامج xargs في مختبرات Bell. انظر دليل Texinfo لـ findutils، Finding Files، لمزيد من المعلومات.

العلل
من غير الممكن استخدام xargs بشكل آمن، حيث ستكون هناك دائمًا فجوة زمنية بين إنتاج قائمة ملفات الدخل واستخدامها في الأوامر التي يصدرها xargs. إذا كان لمستخدمين آخرين وصول إلى النظام، فيمكنهم التلاعب بـ نظام ملفات خلال هذه النافذة الزمنية لإجبار إجراءات الأوامر التي يشغلها xargs على الانطباق على ملفات لم تكن تقصدها. لمناقشة أكثر تفصيلًا لهذا المشكلة والمشاكل ذات الصلة، يرجى الرجوع إلى فصل “Security Considerations” في وثائق findutils Texinfo. يمكن غالبًا استخدام الخيار -execdir لـ find كبديل أكثر أمانًا.

عند استخدام الخيار -I، يُخزن كل سطر يُقرأ من الدخل مؤقتًا داخليًا. هذا يعني أن هناك حدًا أقصى لطول سطر الدخل الذي سيقبله xargs عند استخدامه مع الخيار -I. للالتفاف على هذا القيد، يمكنك استخدام الخيار -s لزيادة مساحة المخزن المؤقت التي يستخدمها xargs، ويمكنك أيضًا استخدام استدعاء إضافي لـ xargs لضمان عدم حدوث سطور طويلة جدًا. على سبيل المثال:

somecommand | xargs -s 50000 echo | xargs -I '{}' -s 100000 rm '{}'

هنا، ليس للاستدعاء الأول لـ xargs حد لطول سطر الدخل لأنه لا يستخدم الخيار -i. بينما يوجد للاستدعاء الثاني لـ xargs مثل هذا الحد، لكننا تأكدنا من أنه لن يواجه أبدًا سطرًا أطول مما يمكنه التعامل معه. هذا ليس حلًا مثاليًا. بدلًا من ذلك، يجب ألا يفرض الخيار -i حدًا لطول السطر، وهذا هو سبب ظهور هذا النقاش في قسم BUGS. لا تحدث المشكلة مع مخرجات find(1) لأنها تُصدر اسم ملف واحد فقط لكل سطر.

في إصدارات xargs حتى الإصدار 4.9.0 (مضمنًا)، كان xargs -P يخرج بينما لا تزال بعض عملياته الوليدة تعمل، إذا انتهت إحداها بالحالة 255.

التبليغ عن الأخطاء
مساعدة GNU findutils عبر الإنترنت: <https://www.gnu.org/software/findutils/#get-help>
أبلغ عن أي أخطاء ترجمة إلى <https://translationproject.org/team/>

أبلغ عن أي مشكلة أخرى عبر النموذج الموجود في متعقب علل GNU Savannah:
    <https://savannah.gnu.org/bugs/?group=findutils>
تُناقش الموضوعات العامة حول حزمة GNU findutils في القائمة البريدية bug-findutils:
    <https://lists.gnu.org/mailman/listinfo/bug-findutils>

حقوق النسخ
حقوق النشر © 1990–2024 مؤسسة البرمجيات الحرة، المحدودة. رخصة GPLv3+: رخصة جنو العمومية الإصدار 3 أو أحدث <https://gnu.org/licenses/gpl.html>.
هذا برنامج حر: أنت حر في تغييره وإعادة توزيعه. لا يوجد أي ضمان، إلى المدى الذي يسمح به القانون.

انظر أيضًا
find(1), kill(1), locate(1), updatedb(1), fork(2), execvp(3), locatedb(5), signal(7)

الوثائق الكاملة <https://www.gnu.org/software/findutils/xargs>
أو متاحة محليًا عبر: info xargs

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.