2011-11-03 78 views
1

我想在shell脚本中使用svn setprop svn:externals命令中的变量。在属性值中使用svn setprop与shell脚本变量

的路径设置为一个变量,工作正常:

LOCALPATH="/some/path" 
TARGETFOLDER="folder" 
svn propset svn:externals 'dir -r100 http://svn.example.com/repos/trunk' $LOCALPATH/$TARGETFOLDER/externals 

但是,如果我尝试使用的版本号的变量,它不工作:

LOCALPATH="/some/path" 
TARGETFOLDER="folder" 
REV="100" 
PROP="'dir -r$REV http://svn.example.com/repos/trunk'" 
echo $PROP 
svn propset svn:externals $PROP $LOCALPATH/$TARGETFOLDER/externals 

PROP变量回显正确,但propset不起作用。我总是得到以下错误:

svn: Cannot specify revision for setting versioned property 'svn:externals' 

任何帮助,将不胜感激。

+0

尝试删除'PROP'值附近的单引号。 –

+0

我需要用''propset'命令的单引号来包装属性才能工作。如果我在最后一行使用'svn:external'$ PROP'$ LOCALPATH','$ PROP'被视为一个字符串文字。 – Tim

回答

3

这是在shell中转义单引号的问题。请参阅there解释。玩弄你的情况发现以下组合工作:

.... 
PROP="dir -r$REV http://.../trunk" 
svn propset svn:externals ''"$PROP"'' $LOCALPATH/$TARGETFOLDER/externals 
+0

谢谢!完美的作品。 – Tim

1

我没有发现你的脚本有什么问题。虽然我遇到同样的问题。

如果你阻止这个脚本,你可以使用一个外部文件设置你的属性考虑

LOCALPATH="/some/path" 
TARGETFOLDER="folder" 
REV="100" 
PROP="'dir -r$REV http://svn.example.com/repos/trunk'" 
echo $PROP > svn.externals 
svn propset svn:externals -F svn.externals 
# rm svn.externals 

注:相反呼应的命令,当你调试壳脚本可以使用xtrace标志:

sh -x myscript.sh 

它会输出每个执行的命令前置w ith与+

+0

谢谢。我可以在设置属性后删除'svn.externals'文件,还是通过颠覆引用? – Tim

+0

是的。有些人也喜欢把这个文件检查成svn,但我认为你不应该这样做,因为propget会给你带来价值。 – Antoine