2011-11-03 77 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