bash - ويندوز - نظام تشغيل يعتمد على سطر الأوامر command line interface




باش سطر الأوامر والحد من المدخلات (2)

حسنا ، دينيزنز. لذلك فقد قبلت حدود طول سطر الأوامر مثل الإنجيل لبعض الوقت. إذن ، ماذا أفعل بافتراضات المرء؟ بطبيعة الحال - التحقق منها.

لدي جهاز Fedora 22 في تصرفي (يعني: Linux with bash4). لقد قمت بإنشاء دليل يحتوي على 500000 رمز inodes (ملفات) يحتوي كل منها على 18 حرفًا. طول سطر الأوامر هو 9،500،000 حرف. تم إنشاؤه بالتالي:

seq 1 500000 | while read digit; do
    touch $(printf "abigfilename%06d\n" $digit);
done

ونلاحظ:

$ getconf ARG_MAX
2097152

لاحظ مع ذلك أنه يمكنني القيام بذلك:

$ echo * > /dev/null

لكن هذا يفشل:

$ /bin/echo * > /dev/null
bash: /bin/echo: Argument list too long

يمكنني تشغيل حلقة for:

$ for f in *; do :; done

وهو قذيفة أخرى بنيت.

قراءة دقيقة للوثائق لحالات ARG_MAX ، الحد الأقصى لطول الوسيطة لوظائف exec . هذا يعني: بدون استدعاء exec ، لا يوجد أي قيود ARG_MAX . لذلك سوف يشرح لماذا لا تقتصر ARG_MAX .

وبالفعل ، يمكنني أن أحصل على دليلي إذا كانت قائمة الوسائط الخاصة بي هي 109948 ملفًا ، أو حوالي 2089000 حرف (أعطي أو أخذ). بمجرد إضافة ملف filename أكثر من 18 حرفًا ، على الرغم من ذلك ، فأنا أحصل على قائمة وسيطة طويلة جدًا . لذلك يعمل ARG_MAX كما هو معلن: exec يفشل مع أكثر من ARG_MAX حرف في قائمة الوسيطة - بما في ذلك ، يجب ملاحظة بيانات البيئة.

هل هناك نوع محدد من الأحرف المسموح به في باش (أو أصداف أخرى) كم من الوقت يمكن أن يكون الإدخال؟ إذا كان الأمر كذلك ، فما هو الحد المسموح به؟

أي هل من الممكن كتابة أمر في bash أطول من اللازم لتنفيذ سطر الأوامر؟ إذا لم يكن هناك حد مطلوب ، فهل هناك حد مقترح؟


هناك حد المخزن المؤقت لشيء من هذا القبيل 1024. والقراءة ببساطة تعليق معجون منتصف أو المدخلات. لحل هذه المشكلة ، استخدم الخيار -e.

http://linuxcommand.org/lc3_man_pages/readh.html

-e استخدام Readline للحصول على الخط في shell التفاعلية

تغيير قراءة لقراءة -e ومعلقة خط معلقة مزعج تختفي.







command-line-arguments