se o seu test.bash
for assim:
echo "Hello World!"; echo error >&2
este script loop.sh
:
./test.bash &> original ; echo original: ; cat original; ok=0 ; er=0
for i in {1..100}; do
rm output ; printf "(ok%d:er%d) running again: " $ok $er
./test.bash 2> >(cat >>output) > >(cat >>output) #<-EXAMINED COMMAND
if diff output original >/dev/null;
then printf "result equal...."; ((ok++))
else printf "result DIFFERENT"; ((er++)); fi
done
deve provar que o arquivo de saída é frequentemente ordenado erroneamente (~ 37% no meu teste)
O problema é mexer com processos paralelos, buffering de redirecionamento descontrolado e velocidades de execução.
Solução com a ferramenta "unbuffer" do pacote "expect" (se você puder instalá-lo). Usando:
(sleep 0.01 ; unbuffer ./test.bash)
em vez de apenas ./test.bash na 4ª linha do script acima, será perfeito (erros de 0%).