Acessando a saída de um pipe Bash com 'read'

6

Estou tentando enviar alguns dados de um canal Bash para uma variável Bash usando o comando read, assim:

$ echo "Alexander the Grape" | read quot
$ echo $quot
$ 

Mas "está vazio". Alguns pesquisando no Google revelaram que isso não é um bug; é um recurso pretendido do Bash. (Seção E5 no FAQ .)

Mas quando eu tentei a mesma coisa em zsh, funcionou. (Idem para ksh.) Existe alguma maneira de fazer isso funcionar no Bash? Eu realmente não quero ter que digitar:

$ quot=$(echo "Alexander the Grape")

Especialmente para comandos longos.

    
por Karthik 08.08.2010 / 04:39

4 respostas

2

Para ler mais sobre esse assunto, consulte BashFAQ / 024 .

Existem várias maneiras de fazer atribuições de variáveis no Bash:

var=$(command)
read var <<< $(command)
read var <<< EOF
$(command)
EOF
printf -v var "%s" $(command)

etc.

    
por 08.08.2010 / 08:47
0

Eu estou supondo que você está tentando criar um comando dentro de uma variável e, em seguida, executá-lo, especificando a variável? Então não faça. execute o comando como está.

    
por 08.08.2010 / 06:38
0

Não. Se você preferir o comportamento de um shell diferente, mude para esse shell. Forças de mercado. :)

    
por 08.08.2010 / 08:30
0
read quot < <(echo "Alexander the Grape")
    
por 01.10.2012 / 17:13

Tags