RUNSCRIPT(1) General Commands Manual RUNSCRIPT(1)

runscript - مفسر اسکریپت برای نرم‌افزار ارتباط سریال Minicom

runscript scriptname [logfile [homedir]]

runscript یک مفسر اسکریپت ساده است که می‌توان آن را از درون برنامه ارتباطی minicom فراخوانی کرد تا وظایفی مانند ورود به یک سیستم یونیکس یا BBS مورد علاقه‌تان را خودکار کند.

این برنامه نام اسکریپت و به صورت اختیاری نام یک فایل لاگ و دایرکتوری خانگی کاربر را به عنوان آرگومان دریافت می‌کند، و انتظار دارد ورودی و خروجی آن به «طرف مقابل» (سیستمی که به آن متصل می‌شوید) متصل باشد. تمام پیام‌های runscript که برای صفحه نمایش محلی در نظر گرفته شده‌اند به خروجی خطای استاندارد (stderr) هدایت می‌شوند. اگر آن را از درون minicom اجرا کنید، تمام این موارد به طور خودکار مدیریت می‌شوند. پارامترهای فایل لاگ و دایرکتوری خانگی فقط برای مشخص کردن نام فایل لاگ و محل ذخیره آن برای دستور log استفاده می‌شوند. اگر دایرکتوری خانگی مشخص نشود، runscript از دایرکتوری موجود در متغیر محیطی $HOME استفاده می‌کند. اگر نام فایل لاگ نیز حذف شود، دستورات log نادیده گرفته می‌شوند.

دستور runscript کلمات کلیدی و فرمان‌های زیر را می‌شناسد:

expect   send     goto     gosub    return   !<   !
exit     print    set      inc      dec      if   timeout
verbose  sleep    break    call     log

رشته <string> به مودم ارسال می‌شود. در انتهای آن یک نویسه '\r' (بازگشت به ابتدای سطر) ارسال می‌گردد. مقدار <string> می‌تواند به اشکال زیر باشد:
- متن معمولی، مانند 'send hello'
- متن محصور در علامت نقل‌قول، مانند 'send "hello world"'

درون <string> دنباله‌های گریز زیر شناسایی می‌شوند:

\n - سطر جدید (newline)
\r - بازگشت به ابتدای سطر (carriage return)
\a - زنگ هشدار (bell)
\b - پس‌بر (backspace)
\c - عدم ارسال '\r' پیش‌فرض
\f - تعویض صفحه (formfeed)
\^ - نویسه ^
\o - ارسال نویسه با کد اکتال o (o یک عدد در مبنای هشت است)

نویسه‌های کنترلی را می‌توان با پیشوند ^ در رشته استفاده کرد (^A تا ^Z، ^[، ^\[u060C] ^]، ^^ و ^_). اگر نیاز به ارسال خود نویسه ^ دارید، باید آن را با نویسه گریز \ همراه کنید.
نویسه‌های مبنای هشت (اکتال) یا چهار رقمی هستند یا با یک نویسه غیررقمی خاتمه می‌یابند؛ برای نمونه، نویسه تهی (null) را می‌توان با \0000 ارسال کرد و دستور 'send 1234' معادل 'send \0061234' است.
همچنین می‌توان از متغیرهای محیطی به صورت $(environment_variable) استفاده کرد، برای نمونه $(TERM). نرم‌افزار Minicom سه متغیر محیطی ویژه را ارسال می‌کند: $(LOGIN) که نام کاربری است، $(PASS) که گذرواژه است (همان‌طور که در مدخل مربوطه در دایرکتوری شماره‌گیری تعریف شده)، و $(TERMLIN) که تعداد خطوط واقعی ترمینال در صفحه نمایش شماست (بدون احتساب خط وضعیت).

رشته <string> را در صفحه نمایش محلی چاپ می‌کند. به طور پیش‌فرض با '\r\n' پایان می‌یابد. توضیحات 'send' در بالا را ببینید.
یک برچسب (با نام 'label') تعریف می‌کند تا با دستورات goto یا gosub استفاده شود.
پرش به نقطه دیگری از برنامه.
پرش به نقطه دیگری از برنامه. هنگامی که به دستور 'return' برخورد شود، کنترل برنامه به دستور پس از gosub بازمی‌گردد. دستورات gosub می‌توانند تو در تو باشند.
بازگشت از یک gosub.
! <command>
یک پوسته اجرا کرده و دستور 'command' را در آن اجرا می‌کند. پس از بازگشت، متغیر '$?' روی وضعیت خروج این دستور تنظیم می‌شود، بنابراین می‌توانید سپس آن را با استفاده از 'if' بررسی کنید.
!< <command>
یک پوسته اجرا کرده و دستور 'command' را در آن اجرا می‌کند. خروجی استاندارد (stdout) حاصل از اجرای دستور به مودم ارسال خواهد شد. پس از بازگشت، متغیر '$?' روی وضعیت خروج این دستور تنظیم می‌شود، بنابراین می‌توانید سپس آن را با استفاده از 'if' بررسی کنید.
خروج از "runscript" با وضعیت خروج اختیاری (پیش‌فرض ۱).
مقدار متغیر <variable> (که یک حرف تکی a-z است) را روی مقدار <value> تنظیم می‌کند. اگر <variable> وجود نداشته باشد، ایجاد خواهد شد. مقدار <value> می‌تواند یک عدد صحیح یا یک متغیر دیگر باشد.
مقدار <variable> را یک واحد افزایش می‌دهد.
مقدار <variable> را یک واحد کاهش می‌دهد.
اجرای شرطی دستور <statement>. عملگر <operator> می‌تواند <، >، != یا = باشد. مانند 'if a > 3 goto exitlabel'.
مدت زمان انتظار سراسری (timeout) را تعیین می‌کند. به طور پیش‌فرض، 'runscript' پس از ۱۲۰ ثانیه خارج می‌شود. این مقدار را می‌توان با این دستور تغییر داد. هشدار: این دستور در درون یک بلوک 'expect' عملکرد متفاوتی دارد که در ادامه توضیح داده شده است.
به طور پیش‌فرض، این گزینه 'on' (روشن) است. این بدان معناست که هر آنچه توسط 'runscript' از مودم خوانده می‌شود، در صفحه نمایش بازتاب می‌یابد تا بتوانید عملکرد 'runscript' را مشاهده کنید.
توقف موقت اجرای برنامه به مدت <value> ثانیه.
expect {
  pattern  [statement]
  pattern  [statement]
  [timeout <value> [statement] ]
  ....
}
مهم‌ترین دستور از میان همه دستورات. دستور expect ورودی را به طور مداوم می‌خواند تا زمانی که الگویی مطابق با یکی از الگوهای مشخص‌شده پیدا کند. اگر expect پس از آن الگو با یک عبارت یا دستور اختیاری مواجه شود، آن را اجرا می‌کند؛ در غیر این صورت، رفتار پیش‌فرض خروج از بلوک expect است. الگوی 'pattern' یک رشته متنی است، همانند دستور 'send' (در بالا ببینید). به طور معمول، expect پس از ۶۰ ثانیه به اتمام زمان انتظار می‌رسد و خارج می‌شود، اما این مقدار با دستور timeout قابل تغییر است.
خروج از یک بلوک 'expect'. این دستور معمولاً فقط به عنوان آرگومان برای 'timeout' درون expect مفید است، زیرا رفتار پیش‌فرض timeout خروج فوری از برنامه است.
انتقال کنترل به یک فایل اسکریپت دیگر. هنگامی که آن اسکریپت بدون خطا به پایان برسد، اسکریپت اصلی ادامه خواهد یافت.
نوشتن متن در فایل لاگ.

اگر می‌خواهید اسکریپت شما باعث خروج از minicom شود (برای نمونه زمانی که با minicom به ISP خود شماره‌گیری می‌کنید و سپس یک نشست PPP یا SLIP را از طریق اسکریپت آغاز می‌نمایید)، دستور "! killall -9 minicom"; را به عنوان آخرین دستور اسکریپت امتحان کنید. گزینه -9 مانع از قطع خط تلفن و ریست شدن مودم توسط minicom قبل از خروج می‌شود.
شاید این اطلاعات برای تبدیل شما به یک «برنامه‌نویس» باتجربه در 'runscript' کافی نباشد، اما همراه با مثال‌ها، نوشتن اسکریپت‌های کاربردی نباید چندان دشوار باشد. اگر با زبان BASIC آشنایی داشته باشید کار آسان‌تر خواهد بود. سورس کد minicom به همراه دو اسکریپت نمونه به نام‌های scriptdemo و unixlogin ارائه می‌شود. به خصوص اسکریپت دومی پایه مناسبی برای توسعه اسکریپت‌های خودتان است.

minicom(1)

دستور runscript باید به صورت داخلی در minicom تعبیه شود.

Miquel van Smoorenburg, <miquels@drinkel.ow.org>
Jukka Lahtinen, <walker@netsonic.fi>

$Date: 2007-10-07 18:13:51 $ User's Manual