a saída de 'svn status -uq' não possui novas linhas no script

0
function runstatus {
    echo "SVN Status -uq:"
    echo 
    status=$(svn status -uq)
    echo $status
    echo $bigline
}

Isto imprime algo como:

SVN Status -uq:

rd_backup rd_backup.sh update 764 update Status against revision: 771

Considerando que, normalmente, executando manualmente o comando em vez de ./update , parece que:

svn status -uq

M * 764 update

Status against revision: 771

ou seja, com novas linhas. Como posso ter certeza de que a formatação permaneça a mesma e seja legível ao executar a partir de um script?

    
por paimoe 23.04.2013 / 13:33

1 resposta

4

Se você quiser que uma função mostre apenas a saída de um comando, não há necessidade de capturar a saída e, em seguida, echo novamente.

Basta executar svn status -uq diretamente. O stdout também será enviado da chamada de função.

Se você realmente precisa usar variáveis e echo , você precisa citar o argumento passado para echo se quiser que o espaço em branco seja preservado: echo "$status" .

A razão é que $status conterá literalmente o seguinte:

M * 764 update
Status against revision: 771

Quando você executar echo $status , echo será chamado assim:

echo M * 764 update \
Status against revision: 771

Este é mais do que um parâmetro, uma vez que o Bash divide os argumentos no espaço em branco ( ver $IFS ) . echo imprimirá cada argumento, separado por um espaço, portanto, enquanto o restante da linha estiver bem, a nova linha será - em essência - colapsada em um espaço.

Se você cercar o argumento com uma citação, echo somente o verá como um argumento e o imprimirá corretamente novamente.

O Wiki do Bash tem uma boa leitura sobre citações e lista algumas razões pelas quais você deve sempre cite suas variáveis além de algumas exceções.

    
por 23.04.2013 / 14:07

Tags