我正在尝试将文件夹中的所有临时文件连接到一个文本文件中。但我一直遇到错误:
if { [catch { exec cat /tmp/new_temp/* >> /tmp/full_temp.txt } msg] }
错误信息:
-cat: /tmp/new_temp/*: No such file or directory
如果我在 tclsh 上尝试同样的事情(没有 catch 和 exec)它会起作用
我正在尝试将文件夹中的所有临时文件连接到一个文本文件中。但我一直遇到错误:
if { [catch { exec cat /tmp/new_temp/* >> /tmp/full_temp.txt } msg] }
错误信息:
-cat: /tmp/new_temp/*: No such file or directory
如果我在 tclsh 上尝试同样的事情(没有 catch 和 exec)它会起作用
为什么要采取如此可怕的做法?使用 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
因为 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
}