Como posso executar um comando a partir de um script bash e ao final imprimir o número de linhas que ele imprimiu?
O equivalente do awk seria
{ print; }
END { print NR; }
Eu só poderia apresentar o seguinte. Isso funciona por enquanto, mas não consigo colocá-lo fora da sub-rede.
| (lc=0; while read; do echo $REPLY; lc=$(($lc+1)); done; echo $lc)
UPDATE
Parece que meu problema era algo bem diferente. Eu tentei usar /dev/stdout
que falhou:
tester> { echo abc | tee /dev/stdout | wc -l; } > /tmp/abc; cat /tmp/abc
2
Isso parece ser porque tee /dev/stdout
dá erro:
tester> echo abc | tee /dev/stdout
tee: /dev/stdout: Permission denied
abc
A resposta de Jeff Schaller funcionou:
tester> { echo abc | tee >(wc -l); } > /tmp/abc; cat /tmp/abc
abc
1
Mas esta manhã, ao tentar novamente, vi que funciona!
tmp> echo abc | tee /dev/stdout
abc
abc
Depois de passar algum tempo, encontrei dois problemas:
Quando |tee /dev/stdout
falhou ontem eu tinha logado como usr1 feito um sudo para outro usr2, sudo su usr2
. Nesse caso, a cadeia do link flexível é /dev/stdout -> /proc/self/fd/1 -> /dev/pts/1
e a última, usr1
. Então, o tee
falhou. Hoje eu tentei como usr1, então foi bem sucedido.
Mas percebi o outro erro com tee /dev/stdout
, que é que toda a saída vai para wc -l
; A contagem de linhas é dupla e nada é impresso.