首页 > 解决方案 > 从另一个脚本调用过程而不使用 Tcl

问题描述

我对 Tcl 脚本有一些疑问。是否可以在不获取包含过程的文件的情况下将一个文件中的过程调用到另一个文件?

标签: tcl

解决方案


您可以使用 Tcl 的自动加载功能。标准方法是将文件与您的过程放在 auto_path 变量中列出的目录之一下的某个位置。然后在这个目录和文件上运行 auto_mkindex 命令。这将在目录中创建一个名为 tclIndex 的文件。

然后,您可以只使用脚本中的过程,它们将在使用时自动加载。

如果你愿意,你可以获得更多的创意。基本上,自动加载功能在 auto_index 数组中查找具有过程名称的元素。数组元素的值应该是一个将被执行的命令,并且应该导致创建过程(或命令)。

示例:假设 /usr/share/tcl 在您的 auto_path 中(您也可以使用默认情况下不在 auto_path 中的目录,但是您必须在每个脚本的开头添加它)。您在 /usr/share/tcl 下创建一个名为 helpers 的目录。在该目录中,您可以使用一些您希望所有脚本都可以使用的命令创建文件。就像一个名为 cat.tcl 的文件:

proc cat {filename} {
    if {[catch {open $filename} fd opts]} {
        return -options [dict incr opts -level] -errorinfo "" $fd
    }
    try {
        return [read -nonewline $fd]
    } finally {
        close $fd
    }
}

然后您启动一个 tclsh(对于指示的目录,您可能需要以 root 身份执行此操作)并运行以下命令:

auto_mkindex /usr/share/tcl helpers/*.tcl

这会在 /usr/share/tcl 中创建一个名为 tclIndex 的文件。从那时起,您可以在任何 Tcl 会话或脚本中使用 cat 命令:

cat /etc/motd

推荐阅读