首页 > 解决方案 > 这一段在这段 TCL 代码中做了什么

问题描述

我很好奇这个“2>@stderr <@stdin”在 TCL 的这段代码中做了什么:

if {[catch {eval exec $listCmds 2>@ stderr <@ stdin } cmdList] } { …

根据我所知道的,catch在内花括号中运行命令{}并将输出存储在cmdList. 如果成功,则不进入if语句,如果不成功,则进入。PS:我来自 C++ 背景。

标签: scriptingtcltk

解决方案


eval exec $listCmds运行一个单独的程序,其名称和参数取自变量 listCmds。(实际上,一个更现代、更安全的成语是exec {*}$listCmds)。

2>@ stderr将此程序的标准错误输出重定向到 Tcl 脚本的标准错误通道,请参阅https://www.tcl.tk/man/tcl/TclCmd/exec.htm#M20

<@ stdin从 Tcl 脚本的标准输入通道重定向该程序的标准输入,参见https://www.tcl.tk/man/tcl/TclCmd/exec.htm#M11


推荐阅读