监视日志文件时的错误处理

时间:2014-09-11 13:43:52

标签: linux bash sed error-handling logfile

我有一个记录串口输出的日志文件。找到匹配的行后,它将终止搜索并继续执行其余的脚本。

我的问题有时候,但并非总是如此,当通过串口记录的机器停止并等待用户输入(“按任意键继续”)时,有一点。

由于我当前的脚本只查找某个字符串Login:,因此无法通过echo返回以绕过提示并继续查找Login:串。

是否有一种简单的方法可以在以下脚本中添加某种caseif语句?

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:提示符。< / p>

1 个答案:

答案 0 :(得分:0)

正如Etan告诉你的那样,这是expect的工作。如果你不能或不能期待,这是一个穷人期待的替代方案:

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

to_serial() {
    echo -en "$@" > /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)