SCRIPT(1) User Commands SCRIPT(1)

script - ضبط و ذخیره تمام تایپ‌ها و خروجی‌های نشست ترمینال

script [options] [file] [-- command [argument...]]

دستور script یک نسخهٔ متنی چاپی (typescript) از همه‌چیز در نشست ترمینال شما تهیه می‌کند. داده‌های ترمینال به شکل خام در پروندهٔ گزارش (log) ذخیره می‌شوند و اطلاعات مربوط به زمان‌بندی در یک پروندهٔ گزارش ساختاریافتهٔ دیگر (اختیاری) ذخیره می‌گردد. پروندهٔ گزارش زمان‌بندی برای بازپخش نشست در آینده توسط scriptreplay(1) و همچنین برای ذخیرهٔ اطلاعات بیشتر دربارهٔ نشست لازم است.

از نسخهٔ 2.35، script از چندین جریان پشتیبانی می‌کند و امکان ثبت ورودی و خروجی را در پرونده‌های جداگانه یا همگی در یک پرونده فراهم می‌سازد. این نسخه همچنین از یک پروندهٔ زمان‌بندی جدید پشتیبانی می‌کند که اطلاعات بیشتری را ثبت می‌نماید. سپس دستور scriptreplay --summary تمام این اطلاعات را ارائه می‌دهد.

اگر آرگومان file یا گزینهٔ --log-out file داده شود، script مکالمه را در این file ذخیره می‌کند. اگر نام پرونده‌ای داده نشود، مکالمه در پروندهٔ typescript ذخیره خواهد شد.

توجه داشته باشید که ثبت ورودی با استفاده از --log-in یا --log-io ممکن است اطلاعات حساس از نظر امنیتی را ثبت کند، زیرا پروندهٔ گزارش شامل تمام ورودی‌های نشست ترمینال (مانند گذرواژه‌ها) صرف‌نظر از تنظیم پرچم پژواک (echo) ترمینال است.

در زیر، آرگومان size می‌تواند با پسوندهای ضربی 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

الحاق خروجی به file یا به typescript، با حفظ محتویات قبلی.

-c, --command command

اجرای command به جای یک پوستهٔ تعاملی. این ویژگی ضبط خروجی برنامه‌ای را که رفتار متفاوتی در زمان متصل نبودن stdout به tty دارد، برای یک اسکریپت آسان می‌کند. به جای استفاده از گزینهٔ -c، دستور command را می‌توان پس از دو خط تیره (--) نیز مشخص کرد.

-E, --echo when

این گزینه پرچم ECHO را برای انتهای اسلیو (slave) شبه‌ترمینال نشست کنترل می‌کند. حالت‌های پشتیبانی‌شده عبارتند از always، never یا auto.

حالت پیش‌فرض auto است — در این حالت، ECHO برای اسلیو شبه‌ترمینال فعال می‌شود؛ اگر ورودی استاندارد فعلی یک ترمینال باشد، ECHO برای آن غیرفعال می‌شود تا از پژواک دوگانه جلوگیری شود؛ اگر ورودی استاندارد فعلی یک ترمینال نباشد (برای مثال لوله: echo date | script)، فعال نگه داشتن ECHO برای اسلیو شبه‌ترمینال امکان مشاهدهٔ داده‌های ورودی استاندارد را روی صفحه هم‌زمان با ثبت آن‌ها در گزارش نشست فراهم می‌کند.

توجه داشته باشید که حالت 'never' بر محتوای گزارش خروجی نشست تأثیر می‌گذارد، زیرا ورودی کاربران در خروجی تکرار نمی‌شود.

-e, --return

بازگرداندن وضعیت خروج (exit status) فرایند فرزند. از همان قالب خاتمهٔ bash هنگام پایان با سیگنال استفاده می‌کند (یعنی وضعیت خروج برابر است با ۱۲۸ + شماره سیگنال). وضعیت خروج فرایند فرزند همیشه در پروندهٔ typescript نیز ذخیره می‌شود.

-f, --flush

تخلیهٔ بافر (flush) خروجی پس از هر نوشتن. این قابلیت برای همکاری از راه دور بسیار مناسب است: یک نفر دستور mkfifo foo; script -f foo را اجرا می‌کند و شخص دیگر می‌تواند با استفاده از cat foo بر آنچه در حال انجام است به صورت بلادرنگ نظارت کند. توجه داشته باشید که فلاش کردن بر کارایی تأثیر می‌گذارد؛ امکان استفاده از SIGUSR1 برای تخلیهٔ بافر گزارش‌ها در صورت نیاز وجود دارد.

--force

اجازه دادن به این‌که پروندهٔ خروجی پیش‌فرض typescript یک پیوند سخت (hard link) یا نمادین (symbolic link) باشد. این دستور پیوندهای نمادین را دنبال خواهد کرد.

-B, --log-io file

ثبت ورودی و خروجی در یک file یکسان. توجه داشته باشید، این گزینه تنها زمانی معنادار است که --log-timing نیز مشخص شده باشد، در غیر این صورت جداسازی جریان‌های خروجی و ورودی از پروندهٔ گزارش file غیرممکن خواهد بود.

-I, --log-in file

ثبت ورودی در file. اگر تنها --log-in مشخص شده باشد، خروجی گزارش غیرفعال می‌شود.

از این قابلیت ثبت با احتیاط استفاده کنید زیرا همهٔ ورودی‌ها، از جمله ورودی‌هایی که در آن‌ها ترمینال پرچم echo را غیرفعال کرده است (مانند وارد کردن گذرواژه‌ها) را ثبت می‌کند.

-O, --log-out file

ثبت خروجی در file. در صورتی که گزینه‌های --log-out یا --log-in داده نشوند، حالت پیش‌فرض ثبت خروجی در پرونده‌ای با نام typescript است. اگر تنها --log-in مشخص شده باشد، خروجی گزارش غیرفعال می‌شود.

-T, --log-timing file

ثبت اطلاعات زمان‌بندی در file. در حال حاضر دو قالب پروندهٔ زمان‌بندی پشتیبانی می‌شوند. قالب کلاسیک زمانی استفاده می‌شود که تنها ثبت یک جریان (ورودی یا خروجی) فعال باشد. قالب چندجریانی هنگام استفاده از --log-io یا زمانی که --log-in و --log-out با هم استفاده می‌شوند به کار می‌رود. همچنین گزینهٔ --logging-format را ببینید.

-m, --logging-format format

اجبار به استفاده از قالب گزارش زمان‌بندی advanced (پیشرفته) یا classic (کلاسیک). حالت پیش‌فرض برای ثبت تنها خروجی، قالب کلاسیک و در صورت درخواست ثبت ورودی و همچنین خروجی، قالب پیشرفته است.

قالب کلاسیک (Classic format)

گزارش زمان‌بندی شامل دو فیلد است که با یک فاصله از هم جدا شده‌اند. فیلد اول نشان می‌دهد که چه مقدار زمان از خروجی قبلی سپری شده است. فیلد دوم نشان می‌دهد که این بار چند نویسه خروجی داده شده است.

قالب پیشرفته (چندجریانی) (Advanced (multi-stream) format)

فیلد اول یک شناسهٔ نوع مدخل است ('I' برای ورودی، 'O' برای خروجی، 'H' برای سرآیند، 'S' برای سیگنال). فیلد دوم نشان می‌دهد که چه مقدار زمان از مدخل قبلی گذشته است و بقیهٔ مدخل، داده‌های مختص آن نوع است.

-o, --output-limit size

محدود کردن اندازهٔ پرونده‌های typescript و زمان‌بندی به size و متوقف کردن فرایند فرزند پس از فراتر رفتن از این اندازه. اندازهٔ محاسبه‌شدهٔ پرونده شامل پیام‌های شروع و پایان که دستور script به خروجی فرایند فرزند اضافه می‌کند، نمی‌شود. به دلیل بافر شدن، پروندهٔ خروجی نهایی ممکن است بزرگ‌تر از مقدار مشخص‌شده باشد.

-q, --quiet

حالت بی‌صدا (پیام‌های شروع و پایان را در خروجی استاندارد نمی‌نویسد).

-t[file], --timing[=file]

ارسال داده‌های زمان‌بندی به خطای استاندارد، یا در صورت ارائه، به file. این گزینه منسوخ شده و گزینهٔ --log-timing که در آن آرگومان file اختیاری نیست، به جای آن ترجیح داده می‌شود.

-h, --help

نمایش متن راهنما و خروج.

-V, --version

نمایش نسخه و خروج.

به محض دریافت SIGUSR1، دستور script بلافاصله بافر پرونده‌های خروجی را تخلیه می‌کند.

متغیر محیطی زیر توسط script استفاده می‌شود:

SHELL

اگر متغیر SHELL وجود داشته باشد، پوسته‌ای که توسط script منشعب (fork) می‌شود همان پوسته خواهد بود. اگر SHELL تنظیم نشده باشد، پوستهٔ Bourne فرض می‌شود. (بیشتر پوسته‌ها این متغیر را به طور خودکار تنظیم می‌کنند).

اجرای اسکریپت زمانی پایان می‌یابد که پوستهٔ منشعب‌شده خارج شود (control-D برای پوستهٔ Bourne (sh(1p))، و exit، logout یا control-d (اگر ignoreeof تنظیم نشده باشد) برای پوستهٔ C، یعنی csh(1)).

برخی دستورات تعاملی مانند vi(1)، داده‌های زاید در پروندهٔ typescript ایجاد می‌کنند. script با دستوراتی که صفحه را دستکاری نمی‌کنند بهتر کار می‌کند، نتایج به گونه‌ای در نظر گرفته شده‌اند که یک ترمینال نسخهٔ چاپی سخت‌افزاری (hardcopy) را شبیه‌سازی کنند.

اجرای script در پوسته‌های غیرتعاملی توصیه نمی‌شود. پوستهٔ داخلی script همیشه تعاملی است، و این می‌تواند منجر به نتایج غیرمنتظره شود. اگر از script در پروندهٔ مقداردهی اولیهٔ پوسته استفاده می‌کنید، باید از افتادن در حلقهٔ بی‌نهایت خودداری نمایید. به عنوان مثال می‌توانید از پروندهٔ .profile استفاده کنید که فقط توسط پوسته‌های ورود (login shells) خوانده می‌شود:

if test -t 0 ; then
    script
    exit
fi

همچنین باید از استفاده از script در لوله‌های دستورات (command pipes) خودداری کنید، زیرا script ممکن است ورودی بیشتری از آنچه انتظار دارید بخواند.

دستور script در 3.0BSD پدیدار شد.

دستور script همه‌چیز را در پروندهٔ گزارش قرار می‌دهد، از جمله خط‌های جدید (linefeed) و نویسه‌های پس‌بر (backspace). این چیزی نیست که یک کاربر تازه‌کار انتظار دارد.

دستور script عمدتاً برای نشست‌های تعاملی ترمینال طراحی شده است. هنگامی که stdin یک ترمینال نباشد (برای مثال: echo foo | script)، نشست می‌تواند متوقف (hang) شود، زیرا پوستهٔ تعاملی درون نشست اسکریپت انتهای پرونده (EOF) را دریافت نمی‌کند و script اطلاعی از زمان بستن نشست ندارد. برای اطلاعات بیشتر بخش نکات (NOTES) را ببینید.

csh(1) (برای سازوکار history)، scriptreplay(1), scriptlive(1)

برای گزارش باگ‌ها، از ردیاب مشکلات https://github.com/util-linux/util-linux/issues.

دستور script بخشی از بستهٔ util-linux است که می‌توان آن را از بایگانی هسته لینوکس https://www.kernel.org/pub/linux/utils/util-linux.

2026-09-02 util-linux 2.42.3