2014-09-19 39 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