我想通過tcl腳本在svn中提交一個文件。我在TCL腳本當試圖使用SVN命令提交文件時,TCL腳本發生錯誤
catch {exec svn commit -m'SDR' 'C:\abc\def\a.txt'} results
運行以下命令,這是返回以下錯誤
svn: E020024: Error resolving case of 'C:\abc\def\a.txt'
我已經嘗試了一切,我可以。在這裏發佈,希望能夠得到解決。提前致謝。
我想通過tcl腳本在svn中提交一個文件。我在TCL腳本當試圖使用SVN命令提交文件時,TCL腳本發生錯誤
catch {exec svn commit -m'SDR' 'C:\abc\def\a.txt'} results
運行以下命令,這是返回以下錯誤
svn: E020024: Error resolving case of 'C:\abc\def\a.txt'
我已經嘗試了一切,我可以。在這裏發佈,希望能夠得到解決。提前致謝。
使用文件加入命令可以解決我的機器上的問題:
catch {exec svn commit -m'SDR' [file join C:\\ abc def a.txt]} results
的問題是,'
字符意味着什麼都沒有給TCL,不像外殼你更習慣使用。幸運的是,通過將這些值(不包含'
字符)放入Tcl變量並僅使用它們,通常可以解決這個問題。在形式上,Tcl使用{
... }
其中shell使用'
... '
,但任何使右字符串在實踐中都可以使用。
此外,Tcl非常熱衷於將\
轉換爲/
的文件名;我們也需要在那裏小心一點,因爲我們將文件名移交給一個子進程(並且file nativename
是正好是我們需要的護理)。
# I'm going to factor these two out into variables; that sort of thing that makes sense
set message "SDR"
set file [file join C:/ abc def a.txt]
catch {exec svn commit -m $message [file nativename $file]} results
當然,在實踐中,許多應用程序有一個工作區的概念,他們這樣做內的文件操作。它可能是當前的工作目錄,它可能在其他地方(它實際上取決於應用程序),但通常最好將它的名稱放在它自己的變量中。然後你就可以在該範圍內更容易使用的名稱:
set workingArea [file join C:/ abc]
set message "SDR"
set file [file join $workingArea def/a.txt]
catch {exec svn commit -m $message [file nativename $file]} results
,我會實際上在程序包一些是,如果它是我自己的代碼(這使用lmap
,這是在Tcl的介紹8.6):
proc svnCommit {message args} {
global workingArea
set code [catch {
exec svn commit -m $message {*}[lmap f $args {
file nativename [file join $workingArea $f]
}]
} results]
return [list $code $results]
}
lassign [svnCommit "SDR" def/a.txt] code results
您可能想要完全刪除'''字符;在使用Tcl進行編程時,它們並不意味着什麼。 –