如何在调用“source”命令时传递参数

How to pass arguments when calling `source` command

本文关键字:命令 参数 source 调用      更新时间:2023-10-16

我需要从c++程序运行source命令,并传递文件名和一些参数。有可能吗?我想在类似脚本的命令行参数中使用它们(使用argc, argv0, ...)。http://www.astro.princeton.edu/~rhl/Tcl-Tk_docs/Tcl/source.n.html此处未指定如何执行。

当从C或C++执行此操作时,您应该:

  1. 初始化Tcl库并创建一个Tcl解释器
  2. 将全局变量argv0argvargc设置为正常Tcl脚本所期望的值。这正是tclsh所做的;除了以这种方式初始化之外,这些变量是完全普通的。
    • argv0是"主"脚本的名称,它可能是您要source的脚本
    • argv是所有其它参数的Tcl列表;argc是该列表的长度
  3. 使用Tcl_FSEvalFileEx(interp,pathPtr,encoding)执行该文件;CCD_ 11命令是围绕该调用的非常薄的包装器。您可能希望将编码参数作为NULL传递,而pathPtr自变量是Tcl_Obj引用

如果您的脚本接受argv中的参数,请在获取此脚本之前设置此变量。

但如果这个脚本调用exit,它将终止整个过程,通常不是您想要的。你可以使用从属对讲机来避免这种情况。

有3个预定义变量:

$argc - number items of arguments passed to a script.
$argv - list of the arguments.
$argv0 - name of the script.

因此,在您的情况下,假设源文件位于同一目录中,并且其名称作为第一个参数传递:

source [lindex $argv 0]