Назад | Перейти на главную страницу

повторяющийся curl + grep на macosx иногда дает плохие результаты?

Запуская macosx 10.6.2, я наблюдаю очень странное поведение сценария, который неоднократно вызывает curl -o (file), а затем выполняет поиск определенной строки внутри него. Иногда grep возвращает 1 (не найдено), когда я ожидал 0 (найдено). Вот сценарий ...

# 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

Я вижу что-то вроде этого:

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

Другими словами, a.txt меняется (насколько может судить grep) между двумя grep!

Кто-нибудь еще видел подобное?

Я замечаю, что если я перехожу в режим сна 1 после вызова curl, проблема исчезает. Так есть ли проблема с повторным использованием одного и того же имени файла снова и снова, или curl возвращается до того, как он закончил запись, или ...?

Это не проблема кризиса из-за обходного пути «сна 1», но я нервничаю, потому что не понимаю поведения.

Вы можете попробовать сделать два grep команды совпадают. Надо -q а другой нет. Вероятно, это не проблема, но стоит устранить различия, чтобы сузить круг вопросов.

Ваш вывод не соответствует тому, что делает скрипт, поэтому мне интересно, работаете ли вы и смотрите ли на две разные версии. Я сам делал это несколько раз, вызывая большое замешательство, пока не понял, что происходит.

вы пробовали вывод отладки bash?

bash -x /path/to/script

Он будет выводить каждый шаг дословно.