Usando o awk
o awk funciona bem para isso:
rev=$(svn info | awk '/Revision:/{print $2}')
O código acima usa substituição de comando , $(...)
, para capturar a saída de um comando e atribuí-lo a uma variável.
No código acima, o awk lê a saída de svn info
e aguarda por uma linha que contenha a string Revision:
. Quando essa linha é encontrada, ela imprime o segundo campo nessa linha, que é o número da revisão.
Usando sed
Também é possível fazer isso usando o sed:
rev=$(svn info | sed -n '/Revision:/ s/.* //p')
Com a opção -n
, o sed será impresso somente quando explicitamente solicitado. /Revision:/
seleciona linhas que contêm a string Revision:
. Para essas linhas, é executado um comando de substituição que remove todos os caracteres até o último espaço em branco na linha e, em seguida, devido à opção p
, a linha é impressa.
Usando o shell
while read -r name value
do
[ "$name" = Revision: ] && var="$value"
done < <(svn info)
O texto acima usa o redirecionamento de subestação de processo , < <(...)
, para fornecer a saída de svn info
para um loop while. Para cada iteração do loop, a primeira palavra na linha é atribuída a name
e o restante da linha é atribuído a value
. Se name
for Revision:
, a variável var
da shell será atribuída a value
, que é o número de revisão.
Muitos, mas não todos, shells suportam a substituição do processo. Quando, como acima, o redirecionamento é combinado com a substituição do processo, o espaço entre os dois <
é essencial.