curl repetido + grep no macosx ocasionalmente dando resultados ruins?

1

Executando o macosx 10.6.2, estou vendo um comportamento extremamente estranho com um script que chama repetidamente o curl -o (arquivo) e depois o greps para uma certa string dentro dele. Ocasionalmente grep retorna 1 (não encontrado) quando eu esperava 0 (encontrado). Aqui está o roteiro ...

# do this 1000 times

for ii in 'cat count.txt'; do

        rm -f a.txt
        rm -f e.txt
        curl  --fail --stderr e.txt -j -o a.txt  -s  $MYURL

        if [ -e a.txt ] ; then

                #  Occasionally a.txt doesn't finish writing on time
                grep  "login-url" a.txt >/dev/null
                LASTERR=$?
                echo $LASTERR is lasterr grep 1
                if [ "$LASTERR" -ne "0" ] ; then
                        cp a.txt anomaly.txt
                        sleep 1
                        echo "Sleeping..."
                fi

                grep -q "login-url" a.txt >/dev/null
                LASTERR=$?
                echo $LASTERR is lasterr grep 2
                if [ "$LASTERR" -ne "0" ] ; then
                    echo "Dying..."
                    exit 1
                fi

                # This is what I actually want to do
                grep "login-url" a.txt  >> out.txt
        fi

done

O que eu vejo é algo assim:

0 is lasterr 1
0 is lasterr 2
...
0 is lasterr 1
0 is lasterr 2
0 is lasterr 1
1 is lasterr 2

Em outras palavras, o a.txt está mudando (tanto quanto o grep pode dizer) entre os dois greps!

Alguém mais viu algo assim?

Se eu colocar um "sleep 1" após a chamada curl, o problema desaparece. Então, há um problema em reutilizar o mesmo nome de arquivo várias vezes, ou o curl está retornando antes que seja feito, ou ...?

Esta não é uma questão de crise por causa da solução alternativa "sleep 1", mas estou nervosa porque não entendo o comportamento.

    
por akaioi 09.02.2010 / 19:42

2 respostas

1

Você pode tentar combinar os dois comandos grep . Um tem -q e o outro não. Esse provavelmente não é o problema, mas vale a pena eliminar as diferenças para restringir as coisas.

Sua saída não corresponde ao que o script está fazendo, portanto, fico imaginando se você está executando e analisando duas versões diferentes. Já fiz isso várias vezes, causando muita confusão até perceber o que está acontecendo.

    
por 09.02.2010 / 20:27
0

você já tentou a saída de depuração do bash?

bash -x /path/to/script

Ele irá mostrar cada passo na íntegra.

    
por 10.02.2010 / 00:44