tclsh(1) Tcl Applications tclsh(1)

tclsh - پوسته ساده حاوی مفسر Tcl

tclsh ?-encoding name? ?fileName arg arg ...?

برنامه tclsh یک برنامه شبیه به پوسته است که دستورات Tcl را از ورودی استاندارد خود یا از یک فایل خوانده و ارزیابی می‌کند. اگر بدون هیچ آرگومانی اجرا شود، به صورت تعاملی کار می‌کند؛ دستورات Tcl را از ورودی استاندارد می‌خواند و نتایج دستورات و پیام‌های خطا را در خروجی استاندارد چاپ می‌کند. این برنامه تا زمانی که دستور exit فراخوانی شود یا در ورودی استاندارد خود به پایان فایل (EOF) برسد، به کار ادامه می‌دهد. اگر فایلی با نام .tclshrc (یا tclshrc.tcl در پلتفرم‌های ویندوز) در دایرکتوری خانگی کاربر وجود داشته باشد، tclsh تعاملی درست پیش از خواندن اولین دستور از ورودی استاندارد، آن فایل را به عنوان یک اسکریپت Tcl اجرا می‌کند.

اگر tclsh همراه با آرگومان‌ها فراخوانی شود، اولین آرگومان‌ها نام یک فایل اسکریپت و به صورت اختیاری، کدگذاری داده‌های متنی ذخیره‌شده در آن فایل اسکریپت را مشخص می‌کنند. هر آرگومان اضافی دیگری به عنوان متغیر در دسترس اسکریپت قرار می‌گیرد (به بخش زیر مراجعه کنید). به جای خواندن دستورات از ورودی استاندارد، tclsh دستورات Tcl را از فایل نام‌برده می‌خواند؛ و هنگامی که به انتهای فایل برسد، tclsh خارج می‌شود. پایان فایل ممکن است با انتهای فیزیکی رسانه یا با نویسه “\032” (“\u001a”، control-Z). مشخص گردد. اگر این نویسه در فایل وجود داشته باشد، برنامه tclsh متن را تا قبل از این نویسه (بدون احتساب خود آن) می‌خواند. برنامه‌ای که به وجود این نویسه در فایل نیاز دارد، می‌تواند با اطمینان آن را به صورت “\032”، “\x1A”، یا “\u001a”؛ کدگذاری کند؛ یا می‌تواند آن را با استفاده از دستوراتی مانند format یا binary تولید کند. هنگامی که نام یک فایل اسکریپت در خط فرمان tclsh داده می‌شود، فایل .tclshrc به طور خودکار اجرا نمی‌شود، اما فایل اسکریپت در صورت تمایل می‌تواند همیشه آن را با دستور source فراخوانی کند.

اگر یک اسکریپت Tcl را در فایلی ایجاد کنید که اولین خط آن چنین باشد:

#!/usr/local/bin/tclsh

در این صورت، اگر فایل را به عنوان فایل اجرایی علامت‌گذاری کنید، می‌توانید فایل اسکریپت را مستقیماً از پوسته خود فراخوانی کنید. این امر فرض می‌کند که tclsh در مسیر پیش‌فرض در /usr/local/bin نصب شده است؛ اگر در جای دیگری نصب شده باشد، باید خط فوق را متناسب با آن تغییر دهید. بسیاری از سیستم‌های یونیکس اجازه نمی‌دهند طول خط #! از حدود ۳۰ نویسه تجاوز کند، بنابراین اطمینان حاصل کنید که فایل اجرایی tclsh با یک نام فایل کوتاه قابل دسترسی باشد.

یک رویکرد حتی بهتر این است که فایل‌های اسکریپت خود را با سه خط زیر آغاز کنید:

#!/bin/sh
# the next line restarts using tclsh \
exec tclsh "$0" ${1+"$@"}

این رویکرد سه مزیت نسبت به رویکرد بخش قبلی دارد. اول، مکان فایل باینری tclsh نباید در اسکریپت به صورت ثابت (hard-wired) قرار داده شود: می‌تواند در هر کجای مسیر جستجوی پوسته شما باشد. دوم، محدودیت ۳۰ نویسه‌ای طول نام فایل در رویکرد قبلی را برطرف می‌کند. سوم، این رویکرد حتی اگر tclsh خودش یک اسکریپت پوسته باشد نیز کار خواهد کرد (این کار در برخی سیستم‌ها برای پشتیبانی از چند معماری یا سیستم‌عامل انجام می‌شود: اسکریپت tclsh یکی از چندین فایل باینری را برای اجرا انتخاب می‌کند). این سه خط باعث می‌شوند هر دو sh و tclsh اسکریپت را پردازش کنند، اما exec تنها توسط sh اجرا می‌شود. ابتدا sh اسکریپت را پردازش می‌کند؛ خط دوم را به عنوان کامنت در نظر می‌گیرد و خط سوم را اجرا می‌کند. دستور exec باعث می‌شود که پوسته پردازش را متوقف کند و به جای آن tclsh را برای پردازش مجدد کل اسکریپت راه‌اندازی کند. هنگامی که tclsh راه‌اندازی می‌شود، هر سه خط را به عنوان کامنت در نظر می‌گیرد، زیرا بک‌اسلش در انتهای خط دوم باعث می‌شود خط سوم به عنوان بخشی از کامنت در خط دوم در نظر گرفته شود.

باید توجه داشته باشید که این نیز یک شیوه متداول است که tclsh با شماره نسخه خود به عنوان بخشی از نام نصب شود. این امر این مزیت را دارد که به چند نسخه مختلف Tcl اجازه می‌دهد تا به طور همزمان بر روی یک سیستم وجود داشته باشند، اما این عیب را نیز دارد که نوشتن اسکریپت‌هایی را که به طور یکنواخت در میان نسخه‌های مختلف Tcl شروع به کار کنند، دشوارتر می‌سازد.

tclsh علاوه بر متغیرهایی که توسط خود کتابخانه Tcl ایجاد می‌شوند (مانند env که متغیرهای محیطی نظیر PATH را به Tcl نگاشت می‌کند)، متغیرهای سراسری Tcl زیر را تنظیم می‌کند:

حاوی تعداد آرگومان‌های arg است (در صورت عدم وجود ۰)، بدون احتساب نام فایل اسکریپت.
حاوی یک لیست Tcl است که عناصر آن همان آرگومان‌های arg به ترتیب هستند، یا یک رشته خالی در صورتی که هیچ آرگومان arg وجود نداشته باشد.
در صورت مشخص شدن، حاوی fileName است. در غیر این صورت، حاوی نامی است که tclsh با آن فراخوانی شده است.
اگر tclsh به صورت تعاملی اجرا شود (هیچ fileName مشخص نشده باشد و ورودی استاندارد یک دستگاه شبیه ترمینال باشد) حاوی ۱، و در غیر این صورت حاوی ۰ است.

هنگامی که tclsh به صورت تعاملی اجرا می‌شود، معمولاً برای هر دستور با اعلان “% ”. پیام می‌دهد. می‌توانید با تنظیم متغیرهای سراسری tcl_prompt1 و tcl_prompt2 اعلان را تغییر دهید. اگر متغیر tcl_prompt1 وجود داشته باشد، باید شامل یک اسکریپت Tcl برای خروجی دادن اعلان باشد؛ به جای نمایش اعلان، tclsh اسکریپت موجود در tcl_prompt1 را ارزیابی و اجرا می‌کند. متغیر tcl_prompt2 به روشی مشابه هنگامی استفاده می‌شود که یک خط جدید وارد شده باشد اما دستور فعلی هنوز کامل نشده باشد؛ اگر tcl_prompt2 تنظیم نشده باشد، هیچ اعلانی برای دستورات ناتمام نمایش داده نمی‌شود.

برای توضیحات بیشتر به Tcl_StandardChannels مراجعه کنید.

auto_path(n), encoding(n), env(n), fconfigure(n)

application, argument, interpreter, prompt, script file, shell

Tcl