2013-12-18 21 views
1

在Subversion config文件中,我必須將Java類路徑傳遞給一個自定義SSH可執行文件,該文件是一個Windows批處理文件。類路徑包含分號以分隔路徑條目。但是,在批處理文件中,只有類路徑的第一個條目到達。隨後的條目作爲附加參數逐個傳遞。例如:Subversion:如何在〜/ .subversion/config中將分號保留爲參數,例如對於tunnels.ssh?

Subversion的config文件包含:

ssh=d:\\temp\\ssh.bat "1\;2;3" 

d:\temp\ssh.bat內容是:

echo %1-%2-%3 > d:\temp\ssh.out 

在通過svn+ssh -protocol連接的工作拷貝調用svn up後,d:\temp\ssh.out的內容是:

1-2-3 

不過,我希望:

1;2;3-- 

測試在Windows上,與SVN版本1.8.4(r1534716)

+0

將反斜槓放在分號前面有幫助嗎? –

+0

@DavidW。很不幸的是,不行。 – mstrap

+0

而且,我把冒號代替分號不起作用。你可以把你的整個隧道命令,並把它放到一個批處理文件?你可能不得不在你的'config'文件中使用'cmd.exe -c my.bat'。所有配置文件正在做的是將該命令傳遞給shell。 –

回答

1

這個問題確實顛覆的組合(特別是我們使用的APR的依賴平臺獨立性)和批處理文件引用。

首先,這裏的問題是分號(;)在處理參數時被批處理文件特別處理。具體除非argument is surrounded by double quotes (") it is replaced by a space (see the delimiters section of at the link)。現在你顯然有一個雙引號圍繞你的論點,所以它應該工作。

但是,Subversion使用APR中的apr_tokenize_to_argv()函數(將配置值拆分爲單獨的參數)。作爲這樣做的一部分,它最終會刪除你的引號(儘管它會注意它們以避免拆分包含空格的參數)。但是,它確實可以讓你逃避引號,在這種情況下,它會忽略它們,並將它們傳遞給它們。

所以設置你的配置,如下所示:

ssh=d:\\temp\\ssh.bat \"1;2;3\" 

應該讓它表現爲你所期望的。現在,這意味着%1將包括引號,但希望Java可以。

+0

謝謝!從給它一個簡短的嘗試,這似乎與Java一起工作。 – mstrap

相關問題