我遇到一个期望脚本没有评估参数的问题。 puts $ {file_id}块(显然简化)中的所有内容都放在虚拟机上,稍后用于配置。您看到的块将相同的代码放入本地目录,以便我查看是否正常工作。
global env
set env(os1) [lindex $argv 0]
set env(scratch_repo) /tmp/yum.repo_[pid]
set file_id [ open ${env(scratch_repo)} "w"]
puts ${file_id} {
root_image=node-${env(os1)}
if {[string first r ${env(os1)}] == 0} {
create_node_byid 1 [string range ${env(os1)} 0 4]-64
} else {
create_node_byid 1 [string range ${env(os1)} 0 5]-64
}
}
不幸的是,日志文件看起来与上面完全相同。这些论点没有被正确替换,我无法弄清楚原因。我尝试过使用常规变量,不同的语法来引用本地变量和全局变量,但是没有运气让它起作用。有什么想法吗?
答案 0 :(得分:1)
正如Etan Reisner指出的那样,在puts ${file_id} "
root_image=node-${env(os1)}
if {[string first r ${env(os1)}] == 0} {
create_node_byid 1 [string range ${env(os1)} 0 4]-64
} else {
create_node_byid 1 [string range ${env(os1)} 0 5]-64
}
"
命令中使用双引号代替大括号,以便它将被替换。
env(os1)
假设root_image=node-Ubuntu
if {-1 == 0} {
create_node_byid 1 Ubunt-64
} else {
create_node_byid 1 Ubuntu-64
}
为Ubuntu,将在文件中生成以下内容
if-else
注意:这只会进行变量替换而不是代码评估。即open Getopt
命令将不会被评估。