Redirecionando a saída para uma variável?

6

Eu sou interessante em direcionar a saída de dois comandos para uma variável. Eu não quero que a saída seja exibida na tela, mas sim atribuída a uma variável dentro do meu script para que eu possa usá-la novamente.

o que estou fazendo é obter o tamanho do arquivo de um diretório usando os comandos abaixo:

ls -l /var/spool | wc -c

Este comando obtém o tamanho do arquivo em bytes e exibe a saída como um inteiro. Estou interessado em obter este número inteiro atribuído a uma variável do meu gosto para que eu possa compará-lo com outra variável mais tarde

Isso não parece funcionar:

size = ls -l /var/spool | wc -c

O redirecionamento funcionaria?

Assim ....

ls -l /var/spool | wc -c > size

De qualquer forma, eu quero que esta saída numérica seja atribuída a uma variável e não seja exibida na tela.

Todas as sugestões são muito bem-vindas!

    
por Justin 20.11.2014 / 20:17

2 respostas

9

Parece bastante simples.

romano@RRyS:~$ size=$(ls -l /var/spool | wc -c)
romano@RRyS:~$ echo $size
476

A sintaxe do shell $(command) executa command e retorna a saída padrão: salve-a em uma variável.

Seu comando:

ls -l /var/spool | wc -c > size 

criará um arquivo chamado size no diretório atual (contendo o número e uma nova linha).

    
por Rmano 20.11.2014 / 20:38
4

Eu prefiro a solução oferecida pela resposta do Rmano , mas se você quiser usar somente o redirecionamento:

read size < <(ls -l /var/spool | wc -c)
    
por Radu Rădeanu 23.11.2014 / 06:51