Armazena saída específica para uma variável de shell

3

Estou procurando armazenar a saída do comando svn info , mais precisamente o número da revisão em uma variável para processamento adicional. Eu só preciso do 4 armazenado.

$ svn info
[...]
Revision: 4
[...]
    
por Axel 14.07.2015 / 08:51

1 resposta

5

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.

    
por 14.07.2015 / 09:14