Captura a saída do comando na variável

1

Você sabe quando faz algo como apt-cache search something | less ? Bem (em um script Bash) como você obtém a entrada e a configura para uma variável (como less está fazendo, mas less não é um script de Bash)?

    
por Ian 24.08.2010 / 21:52

2 respostas

1

Se você quiser fazer algo parecido com o que less está fazendo (receber entrada em sua entrada padrão, processá-la e, em seguida, enviá-la) em um script que você escreve, use um while read loop em seu script.

#!/bin/bash
echo "Beginning"
while read -r line
do
    echo "Processed: [$line]"
done
echo "Ending"

Então você pode executá-lo assim:

some_command | your_script

e sua saída será assim:

Beginning
Processed: [First line of input]
Processed: [Second line of input]
Processed: [Third line of input]
Processed: [Fourth line of input]
Ending

Supondo que some_command em si produz:

First line of input
Second line of input
Third line of input
Fourth line of input

A variável $line está sendo atribuída, por sua vez, ao valor de cada linha de entrada. Você poderia acumular essas linhas se precisasse concatenando cada linha em uma variável escalar:

all=$all$line

ou

all+=$line

ou acrescentando elementos no final de um array:

array+=($line)
    
por 24.08.2010 / 23:00
3

Você está entendendo mal o command | less . Nesse cenário, o comando less não causa a conexão; o pipe conecta o comando anterior a less . Além disso, você está dizendo 'entrada', onde eu acho que você quer dizer 'saída'. O que você digita no terminal é a entrada nesse caso; a saída é o que quer que command devolve. less recebe a saída do comando via | (também conhecido como pipe). O pipe recebe a saída padrão de um comando e o conecta como a entrada padrão de outro. (Você pode encontrar este artigo da Wikipedia útil como um começo.)

Para atribuir a saída de um comando a uma variável, você normalmente faria algo assim:

variable=$(command)
# older syntax for above
variable='command'

Mas duvido muito que você realmente queira atribuir a saída de apt-cache search foo a uma variável.

Você pode elaborar um pouco sobre seu objetivo maior? O que você está realmente tentando fazer?

    
por 24.08.2010 / 22:10

Tags