调用`source`命令时如何传递参数

时间:2013-08-05 06:59:16

标签: c++ arguments tcl

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

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

有3个预定义变量:

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

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

source [lindex $argv 0]