como manter o avanço de linha no resultado retornado pelo comando bash

3

digamos que eu posso rsh para usinar o XXX como user foo, depois da execução:

$result=$(rsh -l foo XXX "ls");
echo $result;

Descobri que o feed de linha foi removido no resultado e não consigo ver o resultado linha a linha. então o que devo fazer se eu quiser que o feed de linha int seja o resultado retornado?

    
por HaiYuan Zhang 12.03.2012 / 08:27

2 respostas

5

A nova linha está lá; o erro está usando echo para examiná-lo (sem as aspas duplas em torno da variável também!)

result=$(rsh -l foo XXX "ls")
echo "$result"

Em casos triviais, você pode se safar sem as aspas, mas os casos interessantes podem conter até mesmo questões de segurança.

Se você está apenas capturando a saída padrão de rsh para que possa imprimi-lo na saída padrão, este é um uso inútil de echo

    
por 12.03.2012 / 09:04
1

Editar: Se você quer dizer as novas linhas entre cada arquivo, apenas certifique-se de citar o resultado:

result="$(rsh -l foo XXX "ls");"

Isto irá manter quaisquer caracteres exceto NUL ( $'%code%' ), que não podem ser armazenados em uma variável Bash.

Se você quer dizer que a última linha está perdida, essa é a solução mais simples que eu conheço:

resultx="$(commands...; echo x)"
result="${resultx%x}"
    
por 12.03.2012 / 10:50

Tags