Eu preciso ver a saída na tela e ao mesmo tempo grep a saída e enviar o resultado do grep para a variável. Eu acho que pode ser feito com tee, mas não consigo descobrir como exatamente. eu tentei
mycommand | tee myvar=$(grep -c keyword)
mycommand | tee >(myvar=$(grep -c keyword))
mas isso não funciona. Como deveria ser, de preferência sem escrever em arquivos?
Você faria isso:
Use tee para canalizar a saída diretamente para o seu terminal, enquanto usa stdout para analisar a saída e salvá-la em uma variável.
Você pode fazer isso com algum malabarismo de descritor de arquivo:
Explicação: o descritor de arquivo #0 é usado para entrada padrão, #1 para saída padrão e #2 para erro padrão; O nº 3 geralmente não é usado. Neste comando,
3>&1
copia o FD #1 (saída padrão) para o #3, o que significa que dentro do{ }
, existem duas maneiras de enviar a saída para o terminal (ou para onde quer que a saída padrão esteja indo).O
$( )
captura apenas o FD #1, então qualquer coisa enviada para o #3 de dentro dele irá contorná-lo. Que é exatamente o quetee /dev/fd/3
faz com sua entrada (além de copiá-la para sua saída padrão, que é agrep
entrada padrão do comando).Essencialmente, o FD #3 está sendo usado para contrabandear a saída após a
$( )
captura.Você pode usar como abaixo. Se você quiser anexar a
-a
opção use com tee, lembre-se de que criará um arquivo com o nome da sua variável.