我有一个记录串口输出的日志文件。找到匹配的行后,它将终止搜索并继续执行其余的脚本。
我的问题有时候,但并非总是如此,当通过串口记录的机器停止并等待用户输入(“按任意键继续”)时,有一点。
由于我当前的脚本只查找某个字符串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:
提示符。< / p>
答案 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)