2014-09-11 54 views
1

我有记录一个串口输出的日志文件。找到匹配的行后,它终止搜索并继续执行脚本的其余部分。错误处理,同时监控日志文件

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

由于我目前的脚本只是在寻找某个字符串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:提示。

+1

我不知道我明白你在这里实际尝试做什么,但这听起来像那种你可能想使用['expect'](http://expect.sourceforge.net/)。 – 2014-09-11 14:00:53

回答

0

由于伊坦告诉你,这是对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'似乎不会退出。但是当'Login:'回显后''回显'>/dev/ttyS0'时,它最终会退出。为什么在'case'退出后它不会退出。 @ jm666 – BenTech2 2014-09-12 16:43:36

+0

@ BenTech2也许,因为'fromserial |而''在子shell中运行。现在尝试 - 编辑。无论如何,这很奇怪,因为在尝试'bash脚本'(使用随机''fromserial'函数)时出口给我... ...稍微修改了你的脚本? – jm666 2014-09-12 17:05:52

+0

谢谢,这是做到了。在'case'完成之后,将'exit'改为'break'以使脚本继续。 – BenTech2 2014-09-12 17:12:03