scripting - 这一段在这段 TCL 代码中做了什么
问题描述
我很好奇这个“2>@stderr <@stdin”在 TCL 的这段代码中做了什么:
if {[catch {eval exec $listCmds 2>@ stderr <@ stdin } cmdList] } { …
根据我所知道的,catch
在内花括号中运行命令{}
并将输出存储在cmdList
. 如果成功,则不进入if
语句,如果不成功,则进入。PS:我来自 C++ 背景。
解决方案
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。
推荐阅读
- ms-access - VBA Scipting FileSystemObject returning different time
- python - PyQt5:创建强制固定高度的流布局
- ssl - 带有 tls 主机的 k8s 入口多个
- mysql - MySQL INNER JOIN 结果每列有 2 个
- javascript - JS Array.push only when Promise resolved
- go - Text rotation in go- go chart library
- r - Violin Plot showing number of observation ggplot
- javascript - 如何在车把上选择json项目
- postgresql - 为什么命令中有时间戳错误?
- android - 为什么 FAB 在 CardView 下设置 layout_anchorGravity