SLSH(1) SLSH(1)

slsh - مفسر اسکریپت‌های S-Lang

slsh [ --help ] [ --version ] [ -g ] [ -n ] [ --init file ] [ --no-readline ] [ -e string ] [ -i ] [ -q, --quiet ] [ -t ] [ -v ] [ -|script-file args... ]

slsh برنامه‌ای ساده برای تفسیر اسکریپت‌های S-Lang است. این برنامه از بارگذاری پویای ماژول‌های S-Lang پشتیبانی کرده و شامل یک واسط readline برای استفادهٔ تعاملی است.

نمایش خلاصه‌ای از گزینه‌ها.
نمایش اطلاعات نگارش slsh.
کامپایل به همراه کدهای اشکال‌زدایی، گزارش‌های ردگیری (tracebacks) و غیره.
بارگذاری نکردن فایل مقداردهی اولیهٔ شخصی.
استفاده از این فایل به جای ~/.slshrc.
عدم استفاده از واسط readline در حالت تعاملی.
اجرای «string» به عنوان کد S-Lang.
اجبار به ورود به حالت تعاملی. در حالت عادی اگر هر دو ورودی استاندارد (stdin) و خروجی استاندارد (stdout) به یک ترمینال متصل باشند، slsh به حالت تعاملی می‌رود.
راه‌اندازی در حالت بی‌صدا با چاپ نکردن اطلاعات نگارش و حق تکثیر.
به طور معمول، slsh در صورت تعریف بودن slsh_main آن را فراخوانی می‌کند. این گزینه از رخ دادن این رفتار جلوگیری می‌کند و برای بررسی خطاهای ساختاری (syntax error) کاربرد دارد.
نمایش پیام‌های باجزئیات (verbose) بارگذاری. این گزینه برای مشاهدهٔ فایل‌هایی که در حال بارگذاری هستند مفید است.

هنگام راه‌اندازی، برنامه سعی می‌کند slsh.rc را به صورت زیر بارگذاری کند. اگر متغیرهای محیطی SLSH_CONF_DIR یا SLSH_LIB_DIR وجود داشته باشند، slsh دایرکتوری‌های متناظر را برای یافتن slsh.rc بررسی می‌کند. در غیر این صورت، مسیرهای زیر را جستجو خواهد کرد:

$(prefix)/etc/ (همان‌طور که در Makefile مشخص شده است)

/usr/local/etc/

/usr/local/etc/slsh/

/etc/

/etc/slsh/

فایل slsh.rc ممکن است فایل‌های دیگری را از دایرکتوری کتابخانهٔ slsh به روشی که در ادامه شرح داده شده است، بارگذاری کند.

پس از بارگذاری slsh.rc، چنانچه فایل $HOME/.slshrc وجود داشته باشد، slsh آن را بارگذاری می‌کند. در نهایت، اسکریپت تعیین‌شده در خط فرمان را بارگذاری خواهد کرد. اگر نام اسکریپت - باشد، از stdin خوانده می‌شود. اگر نام اسکریپت مشخص نشده باشد یا رشته‌ای برای اجرا با گزینهٔ -e تعیین نشده باشد، slsh به حالت تعاملی رفته و ورودی را از ترمینال می‌خواند. اگر اسکریپت وجود داشته باشد و تابعی به نام slsh_main را تعریف کرده باشد، آن تابع فراخوانی خواهد شد.

هنگامی که یک اسکریپت فایلی را از طریق تابع توکار evalfile یا تابع require (که به صورت خودکار توسط slsh.rc بارگذاری می‌شود) بارگذاری می‌کند، فایل در امتداد مسیر SLSH_PATH همان‌گونه که در Makefile تعیین شده است جستجو می‌شود. یک مسیر جایگزین را می‌توان توسط متغیر محیطی SLSH_PATH مشخص کرد.

مسیر جستجو را می‌توان در زمان اجرا از طریق توابع get_slang_load_path و set_slang_load_path جویا شد و تنظیم کرد؛ برای نمونه:

set_slang_load_path ("/home/bill/lib/slsh:/usr/share/slsh");

هنگامی که slsh بدون اسکریپت اجرا شود یا آرگومان خط فرمان -i به آن داده شود، وارد حالت تعاملی خواهد شد. در این حالت، برای دریافت ورودی از کاربر اعلان درخواست می‌شود. برنامه با دریافت EOF (کلیدهای Ctrl-D) یا با خروج کاربر از طریق دستور quit، این حالت را ترک کرده و پایان می‌یابد.

اگر در حین اجرای یک دستور استثنای مهارنشده‌ای رخ دهد، پیام خطا نمایش داده شده و برای دریافت ورودی بیشتر به کاربر اعلان داده می‌شود.

هر شیئی که پس از اجرای دستور روی پشته باقی بماند، چاپ شده و پشته پاک خواهد شد. این امر حالت تعاملی را به عنوان یک ماشین‌حساب کاربردی می‌سازد؛ برای نمونه:

slsh> 3*10;
30
slsh> x = [1:20];
slsh> sum (sin(x)-cos(x));
0.458613
slsh> quit;
توجه داشته باشید که در این حالت، متغیرها به صورت خودکار اعلان می‌شوند.

حالت تعاملی همچنین از ثبت وقایع (logging) دستورها پشتیبانی می‌کند. ثبت وقایع با تابع start_log فعال می‌شود. تابع stop_log ثبت وقایع را خاموش می‌کند. فایل پیش‌فرضی که اطلاعات وقایع در آن نوشته می‌شود slsh.log است. یک فایل جایگزین را می‌توان به عنوان آرگومان اختیاری برای تابع start_log تعیین کرد:

slsh> start_log;
Logging input to slsh.log
   .
   .
slsh> stop_log;
slsh> start_log("foo.log");
Logging input to foo.log
   .
   .
slsh> stop_log;
slsh> start_log;
Logging input to foo.log

مشابه آن، تابع save_input می‌تواند برای ذخیرهٔ ورودی قبلی در یک فایل مشخص به کار رود:

slsh> save_input;
Input saved to slsh.log
slsh> save_input ("foo.log");
Input saved to foo.log

همان‌طور که مثال‌های بالا نشان می‌دهند، خطوط باید با یک نقطه‌ویرگول (semicolon) پایان یابند. این یک ویژگی بنیادین زبان است و به دستورها اجازه می‌دهد در چند خط امتداد یابند؛ برای نمونه:

slsh> x = [
       1,2,3,
       4,5,6];
slsh> sum(x);
برای راحتی بیشتر، برخی کاربران ترجیح می‌دهند دستورها به طور خودکار با نقطه‌ویرگول پایان یابند. جهت افزودن خودکار و بی‌صدای نقطه‌ویرگول به انتهای هر خط ورودی، عبارت زیر را در فایل $HOME/.slshrc قرار دهید:
#ifdef __INTERACTIVE__
slsh_append_semicolon (1);
#endif

حالت تعاملی همچنین از گریز به شل (shell escapes) پشتیبانی می‌کند. برای ارسال یک دستور به شل، پیشوند ! را پیش از آن قرار دهید؛ برای نمونه:

slsh> !pwd
/grandpa/d1/src/slang2/slsh
slsh> !cd doc/tm
slsh> !pwd
/grandpa/d1/src/slang2/slsh/doc/tm

در نهایت، حالت تعاملی از توابع help و apropos پشتیبانی می‌کند:

slsh> apropos list
apropos list ==>
List_Type
list_append
list_delete
   .
   .
slsh> help list_append
list_append
 SYNOPSIS
   Append an object to a list
 USAGE
   list_append (List_Type, object, Int_Type nth)
   .
   .
برای راحتی، توابع help و apropos نیازی به رعایت محدودیت‌های نحوی سایر توابع ندارند.

به طور پیش‌فرض، slsh برای استفاده از واسط readline متعلق به S-Lang ساخته شده است که شامل تکمیل خودکار سفارشی‌پذیر دستورها و سازوکار تاریخچه است. هنگامی که slsh (یا هر برنامهٔ S-Lang دیگری که از این ویژگی بهره می‌برد) در حالت تعاملی آغاز به کار می‌کند، به دنبال فایلی به نام .slrlinerc در دایرکتوری خانگی کاربر می‌گردد و در صورت وجود، آن را بارگذاری خواهد کرد. این فایل به کاربر امکان می‌دهد واسط readline را سفارشی‌سازی کرده و ذخیرهٔ تاریخچه را میان نشست‌ها فعال کند. به عنوان نمونه، نگارشی از فایل .slrlinerc نویسنده در زیر آمده است:

 % Load some basic functions that implement the history mechanism
 () = evalfile ("rline/slrline.rc");
 % The name of the history file -- expands to .slsh_hist for slsh
 RLine_History_File = "$HOME/.${name}_hist";
 % Some addition keybindings.  Some of these functions are defined
 % in rline/editfuns.sl, loaded by rline/slrline.rc
 rline_unsetkey ("^K");
 rline_setkey ("bol",   "^B");
 rline_setkey ("eol",   "^E");
 rline_setkey (&rline_kill_eol,  "^L");
 rline_setkey (&rline_set_mark,  "^K^B");
 rline_setkey (&rline_copy_region, "^Kk");
 rline_setkey (&rline_kill_region, "^K^V");
 rline_setkey (&rline_yank,  "^K^P");
 rline_setkey ("redraw",   "^R");
 #ifexists rline_up_hist_search
 % Map the up/down arrow to the history search mechanism
 rline_setkey (&rline_up_hist_search, "\e[A");
 rline_setkey (&rline_down_hist_search, "\e[B");
 #endif
 #ifexists rline_edit_history
 rline_setkey (&rline_edit_history, "^Kj");
 #endif
 % Add a new function
 private define double_line ()
 {
    variable p = rline_get_point ();
    variable line = rline_get_line ();
    rline_eol ();
    variable pend = rline_get_point ();
    rline_ins (line);
    rline_set_point (pend + p);
 }
rline_setkey (&double_line,  "^K^L");

چندین اسکریپت نمونهٔ مفید در $prefix/share/slsh/scripts/ قرار دارند که در آن $prefix نشان‌دهندهٔ پیشوند نصب slsh است (/usr، /usr/local، ...). این اسکریپت‌ها شامل موارد زیر هستند:

اسکریپتی که اشکال‌زدای S-Lang را اجرا می‌کند.
اندازهٔ یک فایل jpeg را گزارش می‌دهد.
شلی برای مرور یک مخزن SVN.

نویسندهٔ اصلی slsh جان ای. دیویس (John E. Davis) <www.jedsoft.org> است. حالت تعاملی توسط مایک نوبل (Mike Noble) ارائه شده است. کتابخانهٔ S-Lang که slsh بر پایهٔ آن ساخته شده است، اساساً حاصل کار John E. Davis به همراه یاری افراد بسیار دیگری است.

این صفحهٔ راهنما در اصل توسط Rafael Laboissiere برای سیستم دبیان (Debian) نوشته شده است (اما ممکن است توسط دیگران نیز استفاده شود).

حق نسخه‌برداری، توزیع و/یا تغییر این سند تحت شرایط مجوز عمومی همگانی گنو (GNU General Public License)، نگارش ۲ یا هر نگارش بعدی منتشرشده توسط بنیاد نرم‌افزارهای آزاد اعطا می‌شود.

در سیستم‌های دبیان، متن کامل مجوز عمومی همگانی گنو در /usr/share/common-licenses/GPL قابل مشاهده است.

19 February 2021