在Subversion config
文件中,我必须将 Java类路径传递给自定义SSH可执行文件,这是一个 Windows批处理文件。类路径包含用于分隔路径条目的分号。但是,在批处理文件中,只有类路径的第一个条目到达。后续条目作为附加参数逐个传递。例如:
Subversion的config
文件包含:
ssh=d:\\temp\\ssh.bat "1\;2;3"
d:\temp\ssh.bat
的内容是:
echo %1-%2-%3 > d:\temp\ssh.out
在通过svn up
- 协议连接的工作副本中调用svn+ssh
后,d:\temp\ssh.out
的内容为:
1-2-3
但是,我希望:
1;2;3--
在Windows上测试,使用 svn,版本1.8.4(r1534716)
答案 0 :(得分:1)
这个问题实际上是Subversion的组合(特别是我们用于平台独立性的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可以使用它。