2014-09-11 55 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