| SLSH(1) | SLSH(1) |
نام (NAME)
slsh - مفسر اسکریپتهای S-Lang
خلاصه دستور (SYNOPSIS)
slsh [ --help ] [ --version ] [ -g ] [ -n ] [ --init file ] [ --no-readline ] [ -e string ] [ -i ] [ -q, --quiet ] [ -t ] [ -v ] [ -|script-file args... ]
توضیحات (DESCRIPTION)
slsh برنامهای ساده برای تفسیر اسکریپتهای S-Lang است. این برنامه از بارگذاری پویای ماژولهای S-Lang پشتیبانی کرده و شامل یک واسط readline برای استفادهٔ تعاملی است.
گزینهها (OPTIONS)
- --help
- نمایش خلاصهای از گزینهها.
- --version
- نمایش اطلاعات نگارش slsh.
- -g
- کامپایل به همراه کدهای اشکالزدایی، گزارشهای ردگیری (tracebacks) و غیره.
- -n
- بارگذاری نکردن فایل مقداردهی اولیهٔ شخصی.
- --init file
- استفاده از این فایل به جای ~/.slshrc.
- --no-readline
- عدم استفاده از واسط readline در حالت تعاملی.
- -e string
- اجرای «string» به عنوان کد S-Lang.
- -i
- اجبار به ورود به حالت تعاملی. در حالت عادی اگر هر دو ورودی استاندارد (stdin) و خروجی استاندارد (stdout) به یک ترمینال متصل باشند، slsh به حالت تعاملی میرود.
- -q, --quiet
- راهاندازی در حالت بیصدا با چاپ نکردن اطلاعات نگارش و حق تکثیر.
- -t
- به طور معمول، slsh در صورت تعریف بودن slsh_main آن را فراخوانی میکند. این گزینه از رخ دادن این رفتار جلوگیری میکند و برای بررسی خطاهای ساختاری (syntax error) کاربرد دارد.
- -v
- نمایش پیامهای باجزئیات (verbose) بارگذاری. این گزینه برای مشاهدهٔ فایلهایی که در حال بارگذاری هستند مفید است.
مقداردهی اولیه (INITIALIZATION)
هنگام راهاندازی، برنامه سعی میکند 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 را تعریف کرده باشد، آن تابع فراخوانی خواهد شد.
بارگذاری فایلها (LOADING FILES)
هنگامی که یک اسکریپت فایلی را از طریق تابع توکار 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");
حالت تعاملی (INTERACTIVE MODE)
هنگامی که 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 نیازی به رعایت محدودیتهای نحوی سایر توابع ندارند.
سازوکار تاریخچه READLINE (READLINE HISTORY MECHANISM)
به طور پیشفرض، 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");
اسکریپتهای گوناگون (MISCELLANEOUS SCRIPTS)
چندین اسکریپت نمونهٔ مفید در $prefix/share/slsh/scripts/ قرار دارند که در آن $prefix نشاندهندهٔ پیشوند نصب slsh است (/usr، /usr/local، ...). این اسکریپتها شامل موارد زیر هستند:
نویسندگان (AUTHORS)
نویسندهٔ اصلی 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 |