我想在bash中编写一个shell脚本来从svn存储库中部署网站。当我部署网站时,我将导出的目录命名为 website_name -R revision_number 。我希望bash脚本自动重命名导出的目录,因此需要从导出目录中学习当前的修订版号。如果我跑
$> svn info http://svn-repository/trunk
Path: trunk
URL: http://svn-repository/mystery/trunk
Repository Root: http://svn-repository/mystery
Repository UUID: b809e6ab-5153-0410-a985-ac99030dffe6
Revision: 624
Node Kind: directory
Last Changed Author: author
Last Changed Rev: 624
Last Changed Date: 2010-02-19 15:48:16 -0500 (Fri, 19 Feb 2010)
字符串Revision:
之后的数字是我想要的。如何将其转换为bash变量?我是否对svn info
命令的输出进行字符串解析?
答案 0 :(得分:31)
使用svnversion。这将输出修订号/范围,最小附加值
答案 1 :(得分:25)
REVISION=`svn info http://svn-repository/trunk |grep '^Revision:' | sed -e 's/^Revision: //'`
这很简单,如果不优雅的话。
答案 2 :(得分:5)
只需使用一个awk命令。也简单得多。
var=$(svn info http://svn-repository/trunk | awk '/^Revision:/{print $2}')
答案 3 :(得分:4)
解析'Revision'字符串不能在不同的语言环境中移植。 例如。我的语言环境就像:
...
Wersja: 6583
Rodzaj obiektu: katalog
Zlecenie: normalne
Autor ostatniej zmiany: ...
Ostatnio zmieniona wersja: 6583
Data ostatniej zmiany: 2013-03-21 11:33:44 +0100 (czw)
...
你不想解析那个:)
因此,最好的方法是使用'svnversion'作为oefe建议。这是为此目的提到的工具。
答案 4 :(得分:2)
不使用grep或awk:
xxx 1
x0n 2
nnn 3
REVISION=`svn info --show-item=revision | sed 's/ //g'`
最后只是删除尾随空格。
答案 5 :(得分:1)
svn info http://svn-repository/trunk | grep Revision | tr -d 'Revison: '
吐出修订版 在shell脚本中使用反引号来执行此操作并将结果分配给变量:
REVISION=`svn info http://svn-repository/trunk | grep Revision | tr -d 'Revison: '`
答案 6 :(得分:0)
可能有十几种不同的方法可以做到这一点,但我会选择一些简单的方法:
revision="$(svn info http://svn-repository/trunk | grep "^Revision:" | cut -c 11-)"
答案 7 :(得分:0)
这将为您提供头部修订号
svn info -r 'HEAD' | grep Revision | egrep -o "[0-9]+"
egrep是扩展grep。
答案 8 :(得分:0)
REVISION=$(svn info http://svn-repository/trunk |grep '^Revision:' | sed -e 's/^Revision: //p')
echo $REVISION