SCRIPT(1)

الاسم
script - ينشئ نسخة مكتوبة لجلسة الطرفية

موجز

script [خيارات] [ملف] [-- أمر [معامل...]]

الوصف

يقوم script بعمل نسخة مكتوبة لكل شيء في جلسة الطرفية الخاصة بك. تُخزن بيانات الطرفية بصيغتها الخام في ملف السجل، وتُخزن معلومات التوقيت في ملف سجل هيكلي آخر (اختياري). ملف سجل التوقيت ضروري لإعادة تشغيل الجلسة لاحقاً بواسطة scriptreplay(1) ولتخزين معلومات إضافية عن الجلسة.

منذ الإصدارة 2.35، يدعم script تدفقات متعددة ويسمح بتسجيل المدخلات والمخرجات في ملفات منفصلة أو كلها في ملف واحد. تدعم هذه الإصدارة أيضاً ملف توقيت جديد يسجل معلومات إضافية. يوفر الأمر scriptreplay --summary حينها كافة المعلومات.

إذا أُعطي المعطى ملف أو الخيار --log-out ملف، يحفظ script الحوار في هذا الـ ملف. وإذا لم يُعطَ اسم ملف، يُحفظ الحوار في الملف typescript.

لاحظ أن تسجيل المدخلات باستخدام --log-in أو --log-io قد يسجل معلومات حساسة أمنياً لأن ملف السجل يحتوي على جميع مدخلات جلسة الطرفية (مثل كلمات السر) بغض النظر عن إعداد علامة صدى الطرفية.

الخيارات

أدناه، قد يتبع معطى الحجم حجم لواحق مضاعفة KiB (=1024)، و MiB (=1024*1024)، وهكذا لـ GiB و TiB و PiB و EiB و ZiB و YiB (اللاحقة "iB" اختيارية، مثلاً "K" لها نفس معنى "KiB")، أو اللواحق KB (=1000)، و MB (=1000*1000)، وهكذا لـ GB و TB و PB و EB و ZB و YB.

-a، --append
    ألحق المخرجات بالملف ملف أو typescript، مع الاحتفاظ بالمحتويات السابقة.

-c، --command أمر
    شغل الـ أمر بدلاً من صدفة تفاعلية. هذا يسهل على أي سكربت التقاط مخرجات برنامج يتصرف بشكل مختلف عندما لا يكون مخرجه القياسي (stdout) طرفية (tty). بدلاً من استخدام الخيار -c، يمكن أيضاً تحديد الـ أمر بعد شرطة مزدوجة (--).

-E، --echo متى
    يتحكم هذا الخيار في علامة ECHO للطرف التابع للطرفية الوهمية الخاصة بالجلسة. الأنماط المتاحة هي always، أو never، أو auto.

    المبدئي هو auto — في هذه الحالة، يتم تفعيل ECHO للطرفية الوهمية التابعة؛ فإذا كان المدخل القياسي الحالي طرفية، يتم تعطيل ECHO له لمنع الصدى المزدوج؛ وإذا لم يكن المدخل القياسي الحالي طرفية (على سبيل المثال أنبوب: echo date | script) فإن إبقاء ECHO مفعلاً للطرفية الوهمية التابعة يسمح بعرض بيانات المدخل القياسي على الشاشة أثناء تسجيلها في سجل الجلسة في آن واحد.

    لاحظ أن نمط 'never' يؤثر على محتوى سجل مخرجات الجلسة، لأن مدخلات المستخدم لا تكرر في المخرجات.

-e، --return
    أرجع حالة الخروج للعملية الابن. يستخدم نفس تنسيق إنهاء bash عند إنهاء الإشارة (أي أن حالة الخروج هي 128 + رقم الإشارة). تُخزن حالة الخروج للعملية الابن دائماً في ملف النسخة المكتوبة أيضاً.

-f، --flush
    فرغ المخرجات بعد كل كتابة. هذا مفيد للتعاون عن بعد: يقوم شخص بـ mkfifo foo؛ ثم script -f foo، ويمكن لآخر الإشراف في الوقت الفعلي على ما يتم فعله باستخدام cat foo. لاحظ أن التفريغ له تأثير على الأداء؛ من الممكن استخدام SIGUSR1 لتفريغ السجلات عند الطلب.

--force
    اسمح لملف المخرجات المبدئي typescript بأن يكون رابطاً صلباً أو رمزياً. سيتبع الأمر الرابط الرمزي.

-B، --log-io ملف
    سجل المدخلات والمخرجات في نفس الـ ملف. لاحظ أن هذا الخيار لا يكون منطقياً إلا إذا حُدد --log-timing أيضاً، وإلا فسيكون من المستحيل فصل تدفقات المخرجات والمدخلات من الـ ملف السجل.

-I، --log-in ملف
    سجل المدخلات في الـ ملف. تُعطل مخرجات السجل إذا حُدد --log-in فقط.

    استخدم وظيفة التسجيل هذه بحذر لأنها تسجل كل المدخلات، بما في ذلك المدخلات عندما تكون علامة الصدى في الطرفية معطلة (على سبيل المثال، مدخلات كلمة السر).

-O، --log-out ملف
    سجل المخرجات في الـ ملف. المبدئي هو تسجيل المخرجات في الملف المسمى typescript إذا لم يُعطَ الخيار --log-out أو --log-in. تُعطل مخرجات السجل إذا حُدد --log-in فقط.

-T، --log-timing ملف
    سجل معلومات التوقيت في الـ ملف. تتوفر صيغتان لملف التوقيت حالياً. تُستخدم الصيغة الكلاسيكية عند تفعيل تسجيل تدفق واحد فقط (مدخلات أو مخرجات). تُستخدم صيغة التدفق المتعدد عند استخدام --log-io أو عند استخدام --log-in و --log-out معاً. راجع أيضاً --logging-format.

-m، --logging-format تنسيق
    فرض استخدام تنسيق سجل التوقيت advanced أو classic. التنسيق المبدئي هو classic لتسجيل المخرجات فقط، وتنسيق advanced عندما يُطلب تسجيل المدخلات والمخرجات معاً.

    Classic format
        يحتوي سجل التوقيت على حقلين، يفصل بينهما مسافة. يشير الحقل الأول إلى مقدار الوقت المنقضي منذ المخرج السابق. ويشير الحقل الثاني إلى عدد المحارف التي أُخرجت هذه المرة.

    Advanced (multi-stream) format
        الحقل الأول هو معرف نوع الإدخال ('I' لـ Input، و 'O' لـ Output، و 'H' لـ Header، و 'S' لـ Signal). الحقل الثاني هو مقدار الوقت المنقضي منذ الإدخال السابق، وبقية الإدخال هي بيانات خاصة بالنوع.

-o، --output-limit حجم
    قصر حجم ملفات النص المكتوب والتوقيت على حجم وإيقاف العملية الابنة بعد تجاوز هذا الحجم. لا يشمل حجم الملف المحسوب رسائل البدء والانتهاء التي يضيفها أمر script في بداية ونهاية مخرجات العملية الابنة. قد يكون ملف المخرجات الناتج أكبر من القيمة المحددة بسبب التخزين المؤقت.

-q، --quiet
    وضع السكون (عدم كتابة رسائل البدء والانتهاء إلى المخرجات القياسية).

-t[ملف]، --timing[=ملف]
    إخراج بيانات التوقيت إلى الخطأ القياسي، أو إلى ملف عند تحديده. هذا الخيار مهجور لصالح --log-timing حيث يكون وسيط ملف غير اختياري.

-h، --help
    اعرض نص المساعدة ثم اخرج.

-V، --version
    اعرض الإصدار واخرج.

إشارات

عند استلام SIGUSR1، يقوم script بتفريغ ملفات المخرجات فوراً.

البيئة

يستخدم script متغير البيئة التالي:

SHELL
    إذا كان المتغير SHELL موجوداً، فستكون الـ صدفة المتفرعة بواسطة script هي تلك الـ صدفة. إذا لم يُضبط SHELL، فستُفترض صدفة Bourne. (تضبط معظم الـ صدفات هذا المتغير آلياً).

ملاحظات

ينتهي السكربت عند الخروج من الـ صدفة المتفرعة (control-D لصدفة Bourne (sh(1p))، و exit أو logout أو control-d (إذا لم يُضبط ignoreeof) لصدفة C-shell، csh(1)).

تنشئ بعض الأوامر التفاعلية، مثل vi(1)، بيانات غير مرغوب فيها في ملف النص المكتوب. يعمل script بشكل أفضل مع الأوامر التي لا تتلاعب بالشاشة، حيث تهدف النتائج إلى محاكاة طرفية ورقية.

لا يُنصح بتشغيل script في صدفات غير تفاعلية. الـ صدفة الداخلية لـ script تفاعلية دائماً، وقد يؤدي ذلك إلى نتائج غير متوقعة. إذا استخدمت script في ملف تهيئة الـ صدفة، فيجب عليك تجنب الدخول في حلقة مفرغة. يمكنك استخدام ملف .profile على سبيل المثال، والذي يُقرأ بواسطة صدفات الـ ولوج فقط:

    if test -t 0 ; then
        script
        exit
    fi

يجب عليك أيضاً تجنب استخدام script في أنابيب الأوامر، حيث يمكن لـ script قراءة مدخلات أكثر مما تتوقع.

تاريخ

ظهر أمر script في النسخة 3.0BSD.

العلل

يضع script كل شيء في ملف السجل، بما في ذلك تغذية السطور والمسافات للخلف. ليس هذا ما يتوقعه المستخدم المبتدئ.

صُمم script أساساً لجلسات الطرفية التفاعلية. عندما لا يكون stdin طرفية (على سبيل المثال: echo foo | script)، فقد تتعلق الجلسة، لأن الـ صدفة التفاعلية داخل جلسة السكربت تفتقد علامة نهاية الملف EOF ولا يملك script أي دليل على وقت إغلاق الجلسة. راجع قسم NOTES لمزيد من المعلومات.

انظر أيضاً

csh(1) (لآلية history)، scriptreplay(1)، scriptlive(1)

التبليغ عن الأخطاء

لتقارير العِلل، استخدم

التوفر

الأمر script جزء من حزمة util-linux التي يمكن تنزيلها من