我正在尝试在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
更改文件时。
非常感谢任何建议
答案 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