'\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" .TH tclsh 1 "" Tcl "Tcl Applications" .\" The -*- nroff -*- definitions below are for supplemental macros used .\" in Tcl/Tk manual entries. .\" .\" .AP type name in/out ?indent? .\" Start paragraph describing an argument to a library procedure. .\" type is type of argument (int, etc.), in/out is either "in", "out", .\" or "in/out" to describe whether procedure reads or modifies arg, .\" and indent is equivalent to second arg of .IP (shouldn't ever be .\" needed; use .AS below instead) .\" .\" .AS ?type? ?name? .\" Give maximum sizes of arguments for setting tab stops. Type and .\" name are examples of largest possible arguments that will be passed .\" to .AP later. If args are omitted, default tab stops are used. .\" .\" .BS .\" Start box enclosure. From here until next .BE, everything will be .\" enclosed in one large box. .\" .\" .BE .\" End of box enclosure. .\" .\" .CS .\" Begin code excerpt. .\" .\" .CE .\" End code excerpt. .\" .\" .VS ?version? ?br? .\" Begin vertical sidebar, for use in marking newly-changed parts .\" of man pages. The first argument is ignored and used for recording .\" the version when the .VS was added, so that the sidebars can be .\" found and removed when they reach a certain age. If another argument .\" is present, then a line break is forced before starting the sidebar. .\" .\" .VE .\" End of vertical sidebar. .\" .\" .DS .\" Begin an indented unfilled display. .\" .\" .DE .\" End of indented unfilled display. .\" .\" .SO ?manpage? .\" Start of list of standard options for a Tk widget. The manpage .\" argument defines where to look up the standard options; if .\" omitted, defaults to "options". The options follow on successive .\" lines, in three columns separated by tabs. .\" .\" .SE .\" End of list of standard options for a Tk widget. .\" .\" .OP cmdName dbName dbClass .\" Start of description of a specific option. cmdName gives the .\" option's name as specified in the class command, dbName gives .\" the option's name in the option database, and dbClass gives .\" the option's class in the option database. .\" .\" .UL arg1 arg2 .\" Print arg1 underlined, then print arg2 normally. .\" .\" .QW arg1 ?arg2? .\" Print arg1 in quotes, then arg2 normally (for trailing punctuation). .\" .\" .PQ arg1 ?arg2? .\" Print an open parenthesis, arg1 in quotes, then arg2 normally .\" (for trailing punctuation) and then a closing parenthesis. .\" .\" # Set up traps and other miscellaneous stuff for Tcl/Tk man pages. .if t .wh -1.3i ^B .nr ^l \n(.l .ad b .\" # Start an argument description .de AP .ie !"\\$4"" .TP \\$4 .el \{\ . ie !"\\$2"" .TP \\n()Cu . el .TP 15 .\} .ta \\n()Au \\n()Bu .ie !"\\$3"" \{\ \&\\$1 \\fI\\$2\\fP (\\$3) .\".b .\} .el \{\ .br .ie !"\\$2"" \{\ \&\\$1 \\fI\\$2\\fP .\} .el \{\ \&\\fI\\$1\\fP .\} .\} .. .\" # define tabbing values for .AP .de AS .nr )A 10n .if !"\\$1"" .nr )A \\w'\\$1'u+3n .nr )B \\n()Au+15n .\" .if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n .nr )C \\n()Bu+\\w'(in/out)'u+2n .. .AS Tcl_Interp Tcl_CreateInterp in/out .\" # BS - start boxed text .\" # ^y = starting y location .\" # ^b = 1 .de BS .br .mk ^y .nr ^b 1u .if n .nf .if n .ti 0 .if n \l'\\n(.lu\(ul' .if n .fi .. .\" # BE - end boxed text (draw box now) .de BE .nf .ti 0 .mk ^t .ie n \l'\\n(^lu\(ul' .el \{\ .\" Draw four-sided box normally, but don't draw top of .\" box if the box started on an earlier page. .ie !\\n(^b-1 \{\ \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul' .\} .el \}\ \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul' .\} .\} .fi .br .nr ^b 0 .. .\" # VS - start vertical sidebar .\" # ^Y = starting y location .\" # ^v = 1 (for troff; for nroff this doesn't matter) .de VS .if !"\\$2"" .br .mk ^Y .ie n 'mc \s12\(br\s0 .el .nr ^v 1u .. .\" # VE - end of vertical sidebar .de VE .ie n 'mc .el \{\ .ev 2 .nf .ti 0 .mk ^t \h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n' .sp -1 .fi .ev .\} .nr ^v 0 .. .\" # Special macro to handle page bottom: finish off current .\" # box/sidebar if in box/sidebar mode, then invoked standard .\" # page bottom macro. .de ^B .ev 2 'ti 0 'nf .mk ^t .if \\n(^b \{\ .\" Draw three-sided box if this is the box's first page, .\" draw two sides but no top otherwise. .ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c .el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c .\} .if \\n(^v \{\ .nr ^x \\n(^tu+1v-\\n(^Yu \kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c .\} .bp 'fi .ev .if \\n(^b \{\ .mk ^y .nr ^b 2 .\} .if \\n(^v \{\ .mk ^Y .\} .. .\" # DS - begin display .de DS .RS .nf .sp .. .\" # DE - end display .de DE .fi .RE .sp .. .\" # SO - start of list of standard options .de SO 'ie '\\$1'' .ds So \\fBoptions\\fR 'el .ds So \\fB\\$1\\fR .SH "STANDARD OPTIONS" .LP .nf .ta 5.5c 11c .ft B .. .\" # SE - end of list of standard options .de SE .fi .ft R .LP See the \\*(So manual entry for details on the standard options. .. .\" # OP - start of full description for a single option .de OP .LP .nf .ta 4c Command-Line Name: \\fB\\$1\\fR Database Name: \\fB\\$2\\fR Database Class: \\fB\\$3\\fR .fi .IP .. .\" # CS - begin code excerpt .de CS .RS .nf .ta .25i .5i .75i 1i .. .\" # CE - end code excerpt .de CE .fi .RE .. .\" # UL - underline word .de UL \\$1\l'|0\(ul'\\$2 .. .\" # QW - apply quotation marks to word .de QW .ie '\\*(lq'"' ``\\$1''\\$2 .\"" fix emacs highlighting .el \\*(lq\\$1\\*(rq\\$2 .. .\" # PQ - apply parens and quotation marks to word .de PQ .ie '\\*(lq'"' (``\\$1''\\$2)\\$3 .\"" fix emacs highlighting .el (\\*(lq\\$1\\*(rq\\$2)\\$3 .. .\" # QR - quoted range .de QR .ie '\\*(lq'"' ``\\$1''\\-``\\$2''\\$3 .\"" fix emacs highlighting .el \\*(lq\\$1\\*(rq\\-\\*(lq\\$2\\*(rq\\$3 .. .\" # MT - "empty" string .de MT .QW "" .. .BS '\" Note: do not modify the .SH NAME line immediately below! .SH "نام (NAME)" tclsh \- پوسته ساده حاوی مفسر Tcl .SH "خلاصه دستور (SYNOPSIS)" \fBtclsh\fR ?\fB\-encoding \fIname\fR? ?\fIfileName arg arg ...\fR? .BE .SH "توضیحات (DESCRIPTION)" .PP برنامه \fBtclsh\fR یک برنامه شبیه به پوسته است که دستورات Tcl را از ورودی استاندارد خود یا از یک فایل خوانده و ارزیابی می‌کند. اگر بدون هیچ آرگومانی اجرا شود، به صورت تعاملی کار می‌کند؛ دستورات Tcl را از ورودی استاندارد می‌خواند و نتایج دستورات و پیام‌های خطا را در خروجی استاندارد چاپ می‌کند. این برنامه تا زمانی که دستور \fBexit\fR فراخوانی شود یا در ورودی استاندارد خود به پایان فایل (EOF) برسد، به کار ادامه می‌دهد. اگر فایلی با نام \fB.tclshrc\fR (یا \fBtclshrc.tcl\fR در پلتفرم‌های ویندوز) در دایرکتوری خانگی کاربر وجود داشته باشد، \fBtclsh\fR تعاملی درست پیش از خواندن اولین دستور از ورودی استاندارد، آن فایل را به عنوان یک اسکریپت Tcl اجرا می‌کند. .SH "فایل‌های اسکریپت (SCRIPT FILES)" .PP اگر \fBtclsh\fR همراه با آرگومان‌ها فراخوانی شود، اولین آرگومان‌ها نام یک فایل اسکریپت و به صورت اختیاری، کدگذاری داده‌های متنی ذخیره‌شده در آن فایل اسکریپت را مشخص می‌کنند. هر آرگومان اضافی دیگری به عنوان متغیر در دسترس اسکریپت قرار می‌گیرد (به بخش زیر مراجعه کنید). به جای خواندن دستورات از ورودی استاندارد، \fBtclsh\fR دستورات Tcl را از فایل نام‌برده می‌خواند؛ و هنگامی که به انتهای فایل برسد، \fBtclsh\fR خارج می‌شود. پایان فایل ممکن است با انتهای فیزیکی رسانه یا با نویسه .QW \e032 .PQ \eu001a "، control-Z" . مشخص گردد. اگر این نویسه در فایل وجود داشته باشد، برنامه \fBtclsh\fR متن را تا قبل از این نویسه (بدون احتساب خود آن) می‌خواند. برنامه‌ای که به وجود این نویسه در فایل نیاز دارد، می‌تواند با اطمینان آن را به صورت .QW \e032 ، .QW \ex1A ، یا .QW \eu001a ؛ کدگذاری کند؛ یا می‌تواند آن را با استفاده از دستوراتی مانند \fBformat\fR یا \fBbinary\fR تولید کند. هنگامی که نام یک فایل اسکریپت در خط فرمان \fBtclsh\fR داده می‌شود، فایل \fB.tclshrc\fR به طور خودکار اجرا نمی‌شود، اما فایل اسکریپت در صورت تمایل می‌تواند همیشه آن را با دستور \fBsource\fR فراخوانی کند. .PP اگر یک اسکریپت Tcl را در فایلی ایجاد کنید که اولین خط آن چنین باشد: .PP .CS \fB#!/usr/local/bin/tclsh\fR .CE .PP در این صورت، اگر فایل را به عنوان فایل اجرایی علامت‌گذاری کنید، می‌توانید فایل اسکریپت را مستقیماً از پوسته خود فراخوانی کنید. این امر فرض می‌کند که \fBtclsh\fR در مسیر پیش‌فرض در /usr/local/bin نصب شده است؛ اگر در جای دیگری نصب شده باشد، باید خط فوق را متناسب با آن تغییر دهید. بسیاری از سیستم‌های یونیکس اجازه نمی‌دهند طول خط \fB#!\fR از حدود ۳۰ نویسه تجاوز کند، بنابراین اطمینان حاصل کنید که فایل اجرایی \fBtclsh\fR با یک نام فایل کوتاه قابل دسترسی باشد. .PP یک رویکرد حتی بهتر این است که فایل‌های اسکریپت خود را با سه خط زیر آغاز کنید: .PP .CS \fB#!/bin/sh # the next line restarts using tclsh \e exec tclsh "$0" ${1+"$@"}\fR .CE .PP این رویکرد سه مزیت نسبت به رویکرد بخش قبلی دارد. اول، مکان فایل باینری \fBtclsh\fR نباید در اسکریپت به صورت ثابت (hard-wired) قرار داده شود: می‌تواند در هر کجای مسیر جستجوی پوسته شما باشد. دوم، محدودیت ۳۰ نویسه‌ای طول نام فایل در رویکرد قبلی را برطرف می‌کند. سوم، این رویکرد حتی اگر \fBtclsh\fR خودش یک اسکریپت پوسته باشد نیز کار خواهد کرد (این کار در برخی سیستم‌ها برای پشتیبانی از چند معماری یا سیستم‌عامل انجام می‌شود: اسکریپت \fBtclsh\fR یکی از چندین فایل باینری را برای اجرا انتخاب می‌کند). این سه خط باعث می‌شوند هر دو \fBsh\fR و \fBtclsh\fR اسکریپت را پردازش کنند، اما \fBexec\fR تنها توسط \fBsh\fR اجرا می‌شود. ابتدا \fBsh\fR اسکریپت را پردازش می‌کند؛ خط دوم را به عنوان کامنت در نظر می‌گیرد و خط سوم را اجرا می‌کند. دستور \fBexec\fR باعث می‌شود که پوسته پردازش را متوقف کند و به جای آن \fBtclsh\fR را برای پردازش مجدد کل اسکریپت راه‌اندازی کند. هنگامی که \fBtclsh\fR راه‌اندازی می‌شود، هر سه خط را به عنوان کامنت در نظر می‌گیرد، زیرا بک‌اسلش در انتهای خط دوم باعث می‌شود خط سوم به عنوان بخشی از کامنت در خط دوم در نظر گرفته شود. .PP باید توجه داشته باشید که این نیز یک شیوه متداول است که tclsh با شماره نسخه خود به عنوان بخشی از نام نصب شود. این امر این مزیت را دارد که به چند نسخه مختلف Tcl اجازه می‌دهد تا به طور همزمان بر روی یک سیستم وجود داشته باشند، اما این عیب را نیز دارد که نوشتن اسکریپت‌هایی را که به طور یکنواخت در میان نسخه‌های مختلف Tcl شروع به کار کنند، دشوارتر می‌سازد. .SH "متغیرها (VARIABLES)" .PP \fBtclsh\fR علاوه بر متغیرهایی که توسط خود کتابخانه Tcl ایجاد می‌شوند (مانند \fBenv\fR که متغیرهای محیطی نظیر \fBPATH\fR را به Tcl نگاشت می‌کند)، متغیرهای سراسری Tcl زیر را تنظیم می‌کند: .TP 15 \fBargc\fR . حاوی تعداد آرگومان‌های \fIarg\fR است (در صورت عدم وجود ۰)، بدون احتساب نام فایل اسکریپت. .TP 15 \fBargv\fR . حاوی یک لیست Tcl است که عناصر آن همان آرگومان‌های \fIarg\fR به ترتیب هستند، یا یک رشته خالی در صورتی که هیچ آرگومان \fIarg\fR وجود نداشته باشد. .TP 15 \fBargv0\fR . در صورت مشخص شدن، حاوی \fIfileName\fR است. در غیر این صورت، حاوی نامی است که \fBtclsh\fR با آن فراخوانی شده است. .TP 15 \fBtcl_interactive\fR . اگر \fBtclsh\fR به صورت تعاملی اجرا شود (هیچ \fIfileName\fR مشخص نشده باشد و ورودی استاندارد یک دستگاه شبیه ترمینال باشد) حاوی ۱، و در غیر این صورت حاوی ۰ است. .SH "اعلان‌ها (PROMPTS)" .PP هنگامی که \fBtclsh\fR به صورت تعاملی اجرا می‌شود، معمولاً برای هر دستور با اعلان .QW "\fB% \fR" . پیام می‌دهد. می‌توانید با تنظیم متغیرهای سراسری \fBtcl_prompt1\fR و \fBtcl_prompt2\fR اعلان را تغییر دهید. اگر متغیر \fBtcl_prompt1\fR وجود داشته باشد، باید شامل یک اسکریپت Tcl برای خروجی دادن اعلان باشد؛ به جای نمایش اعلان، \fBtclsh\fR اسکریپت موجود در \fBtcl_prompt1\fR را ارزیابی و اجرا می‌کند. متغیر \fBtcl_prompt2\fR به روشی مشابه هنگامی استفاده می‌شود که یک خط جدید وارد شده باشد اما دستور فعلی هنوز کامل نشده باشد؛ اگر \fBtcl_prompt2\fR تنظیم نشده باشد، هیچ اعلانی برای دستورات ناتمام نمایش داده نمی‌شود. .SH "کانال‌های استاندارد (STANDARD CHANNELS)" .PP برای توضیحات بیشتر به \fBTcl_StandardChannels\fR مراجعه کنید. .SH "همچنین ببینید (SEE ALSO)" auto_path(n), encoding(n), env(n), fconfigure(n) .SH "کلیدواژه‌ها (KEYWORDS)" application, argument, interpreter, prompt, script file, shell