我们可以在tcl 8.5中将选项传递给tcl source命令

时间:2016-05-27 04:36:14

标签: linux scripting arguments tcl options

我正在使用此命令来获取get.tcl文件并给出选项'verbose'和'instant':

  

source -verbose -instant get.tcl

上面的命令在tcl 8.4中对我有用,但在tcl 8.5中显示了这个错误

  

source(脚本错误#args:应该是“source_orig? - 编码名称?   文件名“

如果我只写

  

source get.tcl

它在tcl 8.5中传递

tcl 8.5中是否有与此相关的更改?

2 个答案:

答案 0 :(得分:3)

source命令只接受一个选项(自8.5起),-encoding,用于指定正在读取的文件的编码(而不是{返回的默认编码猜测) {1}})。它只是将文件读入内存并(内部等效于)encoding system内容。

您可以在执行eval之前写入您想要的任何变量,包括source等全局变量。有了这个(加上argvuplevel,根据需要,也可能catch),您可以模拟将脚本作为子进程运行。但是,没有文件可能更容易处理这样的参数,而是为了定义一个在采购后立即调用的命令。

答案 1 :(得分:1)

您可以通过执行以下操作将参数传递给源文件:

set ::argv [list -verbose -instant]
source get.tcl

我建议使用:

set ::argv [list -- -verbose -instant]

- 将停止tclsh处理 - 。之后的任何参数 有时tclsh会识别出一个适合你的论点 编程和处理它。您的程序需要了解 - 并妥善处理。