在文本文件中,我有一些Tcl表达式,如:
# DO NOT EDIT!!
# [exec whoami] - [exec date]
# Generated config file
基本上,此文本文件是配置文件的一部分。我想读取文件并用实际值替换这些表达式。
答案 0 :(得分:4)
subst
命令就是为此目的而设计的。
set f [open $theFileName]
set unsubstituted [read $f]
close $f
set substituted [subst $unsubstituted]
# Now use the contents...
请注意,这可以更改脚本中的所有内容,因为set
是可能存在的命令之一!要稍微限制潜在的伤害,请在子解释器中运行:
set f [open $theFileName]
set unsubstituted [read $f]
close $f
set i [interp create]
set substituted [interp eval $i [list subst $unsubstituted]]
interp delete $i
该脚本仍然可以exit
(或exec rm -rf *
;它真的像运行任意程序一样不安全,但至少无法意外更改内部配置。
whoami
产生的信息可直接在Tcl中以$tcl_platform(user)
形式提供。
exec date
生成的信息可直接在Tcl中以clock format [clock seconds]
的形式提供。嗯,默认情况下我的字段顺序略有不同似乎......