如何使用 exec 从 tcl 为 运行 的 perl 脚本传递开关
How to pass switches for a perl script which is run from tcl using exec
我在我的 tcl 脚本中生成了一些变量,它们实际上用作 perl 脚本的开关。
我的开关是 -X
、-Y
和 -Z
,我将它们存储在一个变量中,cmd
set cmd "-X -Y -Z"
我使用 exec 来 运行 tcl 中的 perl 脚本,如下所示:
exec ./script.pl $cmd
这会引发错误:"Error: Unknown option x -y -z"
然后我尝试了另一种方法:
exec ./script.pl -- $cmd
对于这种特殊情况,执行了 perl 脚本但没有开关,即开关没有被激活。
有什么办法可以解决吗?
set cmd "-X -Y -Z"
创建一个包含 -X -Y -Z
的字符串。当您使用 exec ./script.pl $cmd
调用 exec
命令时,您正在使用 -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
的参数
exec
的 --
参数指定 exec
不再解析任何开关(选项)。这允许 exec
用于命令以 -
开头的情况。例如
exec -- -myweirdcommand
参考文献:Tcl Syntax (#5); eval; exec
我在我的 tcl 脚本中生成了一些变量,它们实际上用作 perl 脚本的开关。
我的开关是 -X
、-Y
和 -Z
,我将它们存储在一个变量中,cmd
set cmd "-X -Y -Z"
我使用 exec 来 运行 tcl 中的 perl 脚本,如下所示:
exec ./script.pl $cmd
这会引发错误:"Error: Unknown option x -y -z"
然后我尝试了另一种方法:
exec ./script.pl -- $cmd
对于这种特殊情况,执行了 perl 脚本但没有开关,即开关没有被激活。
有什么办法可以解决吗?
set cmd "-X -Y -Z"
创建一个包含 -X -Y -Z
的字符串。当您使用 exec ./script.pl $cmd
调用 exec
命令时,您正在使用 -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
的参数exec
的 --
参数指定 exec
不再解析任何开关(选项)。这允许 exec
用于命令以 -
开头的情况。例如
exec -- -myweirdcommand
参考文献:Tcl Syntax (#5); eval; exec