Eu quero contar o número de linhas em um tubo e depois continuar o tubo dependendo do resultado.
eu tentei
x=$(printf 'faa\nbor\nbaz\n' \
| tee /dev/stderr | wc -l) 2>&1 \
| if [[ $x -ge 2 ]]; then
grep a
else
grep b
fi
Mas não filtra (nem para "a" nem para "b"). Isso foi bastante inesperado, pois pelo menos estes funcionam conforme o esperado:
printf 'faa\nbor\nbaz\n' | if true; then grep a; else grep b; fi
printf 'faa\nbor\nbaz\n' | if false; then grep a; else grep b; fi
Parece que não consigo redirecionar o stderr de dentro da substituição do comando, pois isso também não funciona (no bash). Ele imprime todas as três linhas:
x=$(printf 'faa\nbor\nbaz\n' | tee /dev/stderr | wc -l) 2>&1 | grep a
Em zsh, ele imprime apenas duas linhas.
Mas em ambos os shells a variável x não é definida após o pipeline e nem mesmo durante a segunda metade do pipeline.
O que posso fazer para contar as linhas em um pipeline e depois agir de acordo com esse número? Eu gostaria de evitar arquivos temporários.