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

标签 perl tcl exec

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

我的开关是-X-Y-Z,我将它们存储在变量cmd中> 与 设置cmd“-X -Y -Z”

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

exec ./script.pl $cmd

抛出错误:“错误:未知选项 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

关于perl - 如何为使用 exec 从 tcl 运行的 perl 脚本传递开关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45178099/

相关文章:

Python 可嵌入 zip : install Tkinter

c++ - Swig:如何将指针列表从 C++ 返回到 Tcl

python - (Python 3.X) Python exec() 函数无缘无故抛出 TypeError

java - Runtime.getRuntime().exec -> Cannot run program CreateProcess error=2, 系统找不到指定的文件

perl - 用户输入后将 perl 进程切换到后台

c++ - 使用TCL命令行,有没有办法停止显示字符?

shell - SED 或 AWK 全部替换为另一个文件中的模式

c - 在并行环境中使用 fork、exec 和管道时出现死锁

perl - 如何修改正在运行的 Gtk3(Perl) 程序中标签的背景颜色?

regex - 删除前导零但不是全零