using bash to get revision number from subversion
I want to write a shell script in bash to deploy websites from an svn repository. When I deploy a website, I name the exported directory website_name-Rrevision_number. I'd like the bash script to automatically rename the exported directory, so it needs to learn the current revision number from 开发者_开发知识库the export directory. If I run
$> 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)
The number after the string Revision:
is what I want. How do I get that into a bash variable? Do I do string parsing of the output from the svn info
command?
Use svnversion. This will output the revision number/range with minimal additional cruft
REVISION=`svn info http://svn-repository/trunk |grep '^Revision:' | sed -e 's/^Revision: //'`
It's simple, if inelegant.
Parsing the 'Revision' string is not portable across different locales. Eg. with my locale it is like:
...
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)
...
You don't wanna parse that :)
So, the best approach is to use 'svnversion' as oefe suggested. This is the tool mentioned for this purpose.
just use one awk command. much simpler as well.
var=$(svn info http://svn-repository/trunk | awk '/^Revision:/{print $2}')
Without using sed, grep or awk:
REVISION=`svn info --show-item=revision --no-newline`
svn info http://svn-repository/trunk | grep Revision | tr -d 'Revison: '
Spits out the revision Use backticks in your shell script to execute this and assign the results to a variable:
REVISION=`svn info http://svn-repository/trunk | grep Revision | tr -d 'Revison: '`
There are probably a dozen different ways to do this, but I'd go with something simple like:
revision="$(svn info http://svn-repository/trunk | grep "^Revision:" | cut -c 11-)"
This will give you the head revision number
svn info -r 'HEAD' | grep Revision | egrep -o "[0-9]+"
egrep is extended grep.
REVISION=$(svn info http://svn-repository/trunk |grep '^Revision:' | sed -e 's/^Revision: //p')
echo $REVISION
精彩评论