Algo parecido com isto?
mkfifo child.fifo
tail -f child.out > child.fifo &
pid=$!
grep -q B child.fifo && kill $pid
na íntegra:
#!/bin/sh
rm -f child.out
./child.sh > child.out &
mkfifo child.fifo
tail -f child.out > child.fifo &
pid=$!
grep -q B child.fifo && kill $pid
rm child.fifo
Parece ser executado em 20 segundos.
$ time ./test2.sh
real 0m20.156s
user 0m0.033s
sys 0m0.058s
UPDATE
Este caminho parece funcionar também:
#!/bin/sh
rm -f child.out
./child.sh > child.out &
(tail -f child.out | grep -q B child.out)
E se você estiver vendo sair imediatamente, tente adicionar um sleep 1, por exemplo
#!/bin/sh
rm -f child.out
./child.sh > child.out &
sleep 1
(tail -f child.out | grep -q B child.out)