2014-09-19 67 views
1

我想在Ubuntu服務器上創建一個Bask腳本,該腳本應該檢查遠程SVN存儲庫中哪些文件發生更改。如果是的話,它應該執行一些任務。 在我的情況下運行doxygen並重新生成文檔。SVN遠程文件發生變化時運行bash腳本

我無法解釋svn狀態響應。 我一直在尋找整個星期,並嘗試找到幾個建議,但它仍然無法正常工作。確切地說,無論它們是否被更改文件,任務總是運行。

這裏是我的腳本至今:

#!/bin/bash 

# Get the status: 
svnstatus=$(svn status -u -q) 

#Check for modified or new files: 
#This part is not working correctly 
added=$(printf "%s" "$svnstatus" | sed -n 's/[Added] *\(.*\)/\1/p') 
modified=$(printf "%s" "$svnstatus" | sed -n 's/[Updated] *\(.*\)/\1/p') 

if [ "x$added" != "x" -o "x$modified" != "x" ] 
then 
    svn update 
    echo regenerated documentation using doxygen  
fi 

的主要問題是與SED的一部分。我是Ubuntu新手,這部分對我來說很困難。我從Internet上找到的腳本中複製了這些內容。

$ svnstatus是

Status against revision: 75016 

沒事的時候新

* 75016 Resources/graphs/dot_tags.txt 
Status against revision: 75017 

當一個文件被改變。

任何意見是非常讚賞

+0

是否'SVN update'當它的東西,否則失敗返回成功?你能做到嗎? doxygen進程是否通過make?如果它正在運行,那麼這可能不是什麼大事,因爲當沒有任何變化時它將避免做任何工作。 – 2014-09-19 14:54:32

回答

1

這sed命令的輸出svn status -u -q不匹配,所以它不會做任何有用的事情。

取而代之,您可以使用grep檢查輸出中是否有第9列中的*字符,表示修改後的文件。

這應該工作:

#!/bin/bash 

# Get the status: 
svnstatus=$(svn status -u -q) 

# Check for modified or new files: 
if echo "$svnstatus" | grep -q '^........\*' 
then 
    svn update 
    echo regenerated documentation using doxygen  
fi 
+0

謝謝理查德,它工作得很好。 – 2014-09-22 12:20:57