Redirecionando a saída para uma variável?


9

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 atribuída a uma variável dentro do meu script para que eu possa usá-lo 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 fornece o tamanho do arquivo em bytes e exibe a saída como um número inteiro. Estou interessado em obter esse número inteiro atribuído a uma variável do meu gosto para que eu possa compará-lo com outra variável posteriormente

Isso não parece funcionar:

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

O redirecionamento funcionaria?

Como isso....

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

De qualquer maneira, quero que essa 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!

Respostas:


12

Parece bem direto.

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

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

Seu comando:

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

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


ou back-citar o comando: size=`ls -l /var/spool | wc -c`. use este formato na sua resposta: "` `size =` ls -l / var / spool | wc -c` `` "sem aspas;)
αғsнιη

1
@KasiyA Eu prefiro usar $()pelos motivos explicados aqui: stackoverflow.com/a/9449788/2907484 :-) #
Rmano Rmano

1
(1) Depois de fazer ls -l /var/spool | wc -c > size_file, você poderia read size_var < size_file. (2) Veja também O $ () sempre pode substituir backticks para substituição de comando?
G-Man Diz 'Reinstate Monica'

6

Prefiro a solução oferecida pela resposta da Rmano , mas se você quiser usar apenas o redirecionamento:

read size < <(ls -l /var/spool | wc -c)

1
A principal vantagem de usar apenas o redirecionamento é que ele não engole erros (dependendo de como você tem o seu script configurado para processamento de tubo - set -e, set -o pipefail, etc.). Portanto, se você usar $(…)seu script, sempre continuará, enquanto o redirecionamento poderá ser configurado para falhar. (que pode ser o que você deseja ou não).
Garrett Motzner
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.