我正在尝试将文件夹中的所有临时文件连接到单个文本文件中。但我一直在遇到错误:
if { [catch { exec cat /tmp/new_temp/* >> /tmp/full_temp.txt } msg] }
错误讯息:
-cat: /tmp/new_temp/*: No such file or directory
如果我在tclsh上尝试相同的事情(没有catch和exec)它可以工作
答案 0 :(得分:5)
为什么这么糟糕的做法?使用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
答案 1 :(得分: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
}