我在tcl中为我正在处理的项目编写脚本。
我想尽可能地自动化事物,并且希望尽可能不触及脚本的源代码。我想从.bat或.job文件中运行主脚本文件,我传递命令以执行脚本和参数。
我在stackoverflow上提到过这篇文章:
How to run tcl script in other tcl script?
并且做了几乎相同的事情。但是,由于我的脚本是裸代码而不是单个巨大的proc,我没有“args”参数来读取我想传递的参数。
例如,如果script1.tcl是包含裸代码的主文件,我想要一个文件script2.job或script2.bat这样,
<command-to-run-script1.tcl> <mandatory-args> <optional-args>
是文件的内容。
关于如何实现相同的任何建议?
答案 0 :(得分:2)
要运行Tcl脚本,传入一些参数,请执行:
tclsh script1.tcl theFirstArgument theSecondArgument ...
它在Windows上的CMD脚本/ BAT文件以及所有Unix上的shell脚本中的工作原理。您可能也希望在某些参数周围加上引号,但这只是带参数的程序的绝对正常运行。 (tclsh
可能需要tclsh8.5
或tclsh85
或者......好吧,这取决于它的安装方式。script1.tcl
可能需要一个完整的路径到脚本。)
在脚本中,参数(从theFirstArgument
开始)将出现在全局argv
变量的Tcl列表中。请注意,这是 not args
,这是程序的一项功能。有很多方法可以解析参数列表,但是在调用期间提供的任何引用都应该已被剥离。
这是一个非常简单的版本:
foreach argument $argv {
puts "Oh, I seem to have a >>$argument<<"
}
你可能需要更精细的东西!虽然有很多可能性,但一定要确切地获得更多关注的想法。
如果您从另一个Tcl脚本调用Tcl,则需要使用exec
来执行此操作。另一方面,您可以通过其他方式让自己更容易:
exec [info nameofexecutable] script1.tcl theFirstArgument theSecondArgument ...
info nameofexecutable
命令返回Tcl解释程序的名称(通常为tclsh8.5
或wish86
或......)