我把这个打开了:
set r [catch {open "|[concat $config(cmd,sh) [list $cmd 2>@1]]" r} fid]其中$config(cmd,sh)是cmd /c,我正在尝试在$cmd中传递一个文件名(可能还有诸如echo之类的命令)。如果文件名中没有空格,即:
cmd是echo /filename
平安无事。使用空格,即:
cmd is echo "/file name"似乎传递的是:
\"file name\"。
当我在Linux上尝试时,我得到的结果是"file name" (没有反斜杠)。我尝试用"\ "替换文件名中的空格,但是目标得到了两个文件名,即空格被用来分隔文件名。
我开始认为我在Tcl的Windows端口中发现了一个bug……
发布于 2013-04-17 13:04:59
啊,这看起来很复杂!要将这类内容传递到管道创建代码中,您需要使用正确的方法:
set r [catch {open |[list {*}$config(cmd,sh) $cmd 2>@1] r} fid]也就是说,在构建管道时,请始终将表单与|[list ...]一起使用,因为文档中说这就是开管器要查找的内容。(这是Tcl中唯一类似的命令。)当然,在这种情况下,使用(8.5+) {*}语法也要简单得多,因为它显然是在做正确的事情。
https://stackoverflow.com/questions/16048951
复制相似问题