SVN远程文件更改后运行bash脚本

时间:2014-09-19 14:43:24

标签: bash svn ubuntu-12.04

我正在尝试在Ubuntu服务器上创建一个Bask脚本,该脚本应检查远程SVN存储库中的文件是否已更改。如果是这样,它应该执行一些任务。 在我的例子中运行doxygen并重新生成文档。

我在解释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的新手,那部分对我来说很难。我从我在互联网上找到的脚本中复制了它。

$ svnstatus是

Status against revision: 75016

什么都没有新的

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

更改文件时。

非常感谢任何建议

1 个答案:

答案 0 :(得分: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