2015-06-19 111 views
0

我在期望脚本没有评估参数时遇到问题。 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 
} 
} 

不幸的是,日志文件看起来和上面一样。争论没有被正确取代,我无法弄清楚为什么。我试过使用常规变量,不同的语法来引用本地和全局变量,但没有运气让这个工作。有什么想法吗?

+1

变量不会在tcl的'{...}'引号中被评估。 –

+0

我试过使用$ env(os1),它仍然无法使用! – sirstancake

回答

1

由于Etan Reisner在puts命令中使用双引号而不是大括号,因此它将被替换。

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)作为Ubuntu的,将产生如下内容的文件

root_image=node-Ubuntu 
if {-1 == 0} { 
    create_node_byid 1 Ubunt-64 
} else { 
    create_node_byid 1 Ubuntu-64 
} 

注意的:这只会做变量替换不是代码评价如此。即if-else命令将不会被评估。

+0

啊,好的。当他说引号时,我不确定他的意思。非常感谢!这正是我正在寻找的。 – sirstancake