对于这个脚本:
puts [exec cvs up *.tcl]
我想 cvs updtae 这个文件夹下的所有 .tcl 文件。
但我总是收到“cvs update: nothing known about *.tcl”错误信息。
我该如何解决这个问题?
非常感谢
TCLexec
不通配符。尝试puts [exec cvs up [glob *.tcl]]
编辑:那不太行;见评论。以下方法确实有效:
# These two don't work with spaces in the names:
exec echo [glob *.tcl] | xargs cvs up
exec bash -c "cvs up [glob *.tcl]"
# Use this instead:
exec bash -c "cvs up *.c"
您不希望 TCL 进行 globbing - 您希望它发生在 shell 中。尝试这个
set exec_call "cvs up *.tcl"
set caught [catch {eval exec -keepnewline $exec_call } result]
if { $caught } {
#handle the error stored in $result
} else {
#handle success
}
如果您有 Tcl 8.5,请使用列表扩展语法:exec cvs up {*}[glob *.tcl]
如果你有一个较旧的 Tcl:eval [linsert [glob *.tcl] 0 exec cvs up]
或eval [concat exec cvs up [glob *.tcl]]
前者更安全。