3

我正在尝试将文件夹中的所有临时文件连接到一个文本文件中。但我一直遇到错误:

 if { [catch { exec cat /tmp/new_temp/* >> /tmp/full_temp.txt } msg] }

错误信息:

-cat: /tmp/new_temp/*: No such file or directory

如果我在 tclsh 上尝试同样的事情(没有 catch 和 exec)它会起作用

4

2 回答 2

7

为什么要采取如此可怕的做法?使用 Tcl 本身来连接这些文件:

set out [open /tmp/full_temp.txt w]
fconfigure $out -translation binary
foreach fname [glob -nocomplain -type f "/tmp/new_temp/*"] {
    set in [open $fname]
    fconfigure $in -translation binary
    fcopy $in $out
    close $in
}
close $out
于 2012-12-21T12:53:45.507 回答
2

因为 Tcl 不是 shell,它不会自动扩展 glob 模式。尝试

if { [catch {exec sh -c {cat /tmp/new_temp/* >> /tmp/full_temp.txt}} msg] }

要让 Tcl 进行文件名扩展,您需要glob命令

set code [catch [list exec cat {*}[glob /tmp/new_temp/*] >> /tmp/full_temp.txt] msg]
if {$code != 0} {
    # handle error
}
于 2012-12-21T12:18:32.780 回答