如何为使用exec从tcl运行的perl脚本传递开关

时间:2017-07-18 22:23:53

标签: perl tcl exec

我在我的tcl脚本中生成了一些变量,这些变量实际上用作perl脚本的开关。

我的开关是-X-Y-Z,我将它们存储在变量cmdset cmd "-X -Y -Z"

我使用exec在tcl中运行perl脚本,如下所示:

exec ./script.pl $cmd

会抛出错误:"Error: Unknown option x -y -z"

然后我尝试了另一种方式:

exec ./script.pl -- $cmd

对于这种特殊情况,perl脚本会被执行但没有开关,即交换机不会被激活。

有什么方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

set cmd "-X -Y -Z"

在其中创建一个包含-X -Y -Z的字符串。当您使用exec调用exec ./script.pl $cmd命令时,您将使用-X -Y -Z传递一个参数。你想要的是三个独立的论点。最好的方法是:

 exec ./script.pl {*}$cmd

{*}运算符将列表扩展为其组成单词。

这非常有用。您可以使用类似于(示例)的代码构建参数列表:

set cmd {}
lappend cmd -X
if { $mytest eq "true" } {
   lappend cmd -Y 
}
lappend cmd -Z
if { $filename ne {} } {
  lappend cmd -f
  lappend cmd $filename
}
exec ./script.pl {*}$cmd

对于旧版本的Tcl,必须使用eval命令:

eval exec ./script.pl $cmd

编辑: - exec的参数

--的{​​{1}}参数指定exec不再解析任何开关(选项)。这允许exec用于命令以exec开头的情况。例如

-

参考文献:Tcl Syntax (#5); eval; exec