______________________________________________________________________________
tclsh − 包含 Tcl 解释器的简单的 shell
tclsh ?fileName arg arg ...? _________________________________________________________________
Tclsh 是一个 shell 类应用程序,从它的标准输入或一个文件读 Tcl 命令并对其求值(evaluate)。 如果你不加参数的调用,则它交互式的执行,从标准输入读 Tcl 命令并向标准输出打印命令结果和出错信息。它一直运行直到调用 exit 命令或在它的标准输入上读到文件结束。如果在用户的主(home)目录里存在一个文件 .tclshrc (或在 Windows 平台上的 tclshrc.tcl),在从标准输入读第一条命令之前,tclsh 把这个文件作为一个 Tcl 脚本来求值。
如果加参数调用 tclsh 则第一个参数是脚本文件的名字而任何额外的参数作为给脚本使用的变量(见后)。 tclsh 将从指名的文件中读 Tcl 命令而不是从标准输入读取;当到达文件结束时 tclsh 将退出。在这种情况下不自动的对 .tclshrc 求值,如果需要的话,脚本文件总是可以 source(包含)它。
如果你建立的 Tcl 脚本文件的第一行是
#!/usr/local/bin/tclsh
则如果你把它标记为可执行的,接着就可以直接在你的 shell 中调用这个脚本文件。这里假定了 tclsh 被安装在缺省的位置 /usr/local/bin;如果它被安装在其他地方,那么你需要修改上述行来匹配之。许多 UNIX 系统不允许 #! 行超出 30 个字符的长度,所以要确定 tclsh 可执行文件能被用短文件名访问。
一个更好的途径是用下面三行来开始你的脚本文件:
#!/bin/sh
# the next line restarts using tclsh \
exec tclsh "$0" "$@"
这种方法比起前面的段落有三个好处。首先,tclsh 二进制文件的位置不需要填入(hard-wired into) 脚本中: 它可以在你的 shell 查找路径中的任何地方。其次,他超越了(get around)了上种方法的 30 字符的文件名的限制。第三,这种方法在 tclsh 自身也是 shell 脚本时仍可运行(一些系统要处理多体系或操作系统: tclsh 脚本选择某个二进制文件来运行)。第三行导致 sh 和 tclsh 两者来处理脚本,但 exec 只被 sh 执行。 sh 首先处理脚本文件;它把第二行作为脚本文件对待并执行第三行。exec 语句导致 shell 停止处理而启动 tclsh 来重新处理整个脚本。当 tclsh 启动时,因为第二行的反斜线导致第三行被作为第二行注释的一部分,它把所有三行都作为注释对待。
You should note that it is also common practise to install tclsh with │ its version number as part of the name. This has the advantage of │ allowing multiple versions of Tcl to exist on the same system at once, │ but also the disadvantage of making it harder to write scripts that │ start up uniformly across different versions of Tcl.
Tclsh 设置了下列 Tcl 变量:
argc |
包含 arg 参数的个数(没有则为 0),不包括脚本文件的名字。 |
||
argv |
包含一个 Tcl 列表,其元素依次是 arg 参数,如果没有 arg 参数则是一个空串。 |
||
argv0 |
如果指定了 fileName 则在此包含。否则。包含调用 tclsh 使用的名字。 |
tcl_interactive
如果交互式运行 tclsh 则包含 1(不指定fileName 并且标准输入是一个终端类设备),否则是 0。
当交互式的调用 tclsh 时,它通常为每条命令提示“%”。你可以通过设置变量 tcl_prompt1 和 tcl_prompt2 来改变提示符。如果存在变量 tcl_prompt1 则它必须由一个输出一个提示符的 Tcl 脚本组成;tclsh 对 tcl_prompt1 中的脚本求值而不是输出一个提示符。变量 tcl_prompt2 以类似的方式用在键入了换行而当前命令却不完整的时候;如果没设置 tcl_prompt2 则对不完整的命令不给以提示符。
argument, interpreter, prompt, script file, shell
寒蝉退士
2001/06/20
http://cmpp.linuxforum.net