2014-09-11 5 views
1

У меня есть файл журнала, который регистрирует вывод последовательного порта. После того, как найденная строка найдена, она прекращает поиск и продолжается с остальной частью скрипта.Обработка ошибок во время мониторинга файла журнала

Моя проблема иногда, но не всегда, есть момент, когда машина, которая регистрируется через последовательные остановки и ждет ввода пользователя («нажмите любую клавишу, чтобы продолжить»).

Поскольку мой текущий скрипт только ищет определенную строку Login:, это не есть способ echo возвращения в обходе строки и продолжать искать Login: строки.

Есть ли простой способ добавить какой-то код case или if к следующему сценарию?

cat /dev/ttyS0 > serial.log & 
catPID=$! 
sh -c 'tail -n +0 -f serial.log | { sed "/Login:/ q" && kill $$ ;}' & 
searchPID=$! 
wait "$searchPID" 
kill "$catPID" 
echo "Admin" > /dev/ttyS0 

Мне нужен способ для сценария, чтобы проверить, если строка: Press any key to continue, то echo \r и если это не произойдет, подсказывать, продолжить поиск в Login: строке.

+1

Я не уверен, что понимаю, что вы на самом деле пытаетесь сделать здесь, но это звучит как вид вещь, которую вы, возможно, захотите использовать ['expect'] (http://expect.sourceforge.net/) для. –

ответ

0

Поскольку Etan сказал вам, это работа для expect. Если вы не можете или не ожидаете, вот альтернатива бедного человека:

#!/bin/bash 
fromserial() { 
    cat /dev/ttyS0 
} 

to_serial() { 
    echo -en "[email protected]" > /dev/ttyS0 
} 

#fromserial | tee logfile | while :  #if want logfile 
while :     #if not 
do 
    read -r -t1 line 
    case "$line" in 
     Login:) to_serial "Admin" ; exit ;; 
     '') ;; #nothing 
     'Press any key to continue') to_serial "\r" ;; 
    esac 
done < <(fromserial) 
+0

это в основном работает, но 'read', похоже, не выходит после того, как цикл закончился. но когда я 'echo" anything ">/dev/ttyS0' после того, как« Login: »будет эхом, он, наконец, выйдет. почему он не выходит после выхода «case». @ jm666 – BenTech2

+0

@ BenTech2 Возможно, потому что 'fromserial | а 'пробегает в подоболочке. попробуйте сейчас - отредактирован. В любом случае, это странно, потому что выходы для меня при попытке «bash script» (с использованием случайной функции fromserial) ... Модифицировал ли вы несколько сценарий? – jm666

+0

Спасибо, что сделал. изменил 'exit' на' break', чтобы сценарий продолжался после завершения 'case'. – BenTech2

Смежные вопросы