2009-12-29 52 views
2

我有一臺設備在我的PC旁邊運行,當它運行時它正在將它的串行端口吐出日誌行。我有這樣的有線到我的電腦,我可以看到日誌行的罰款,如果我使用的是無論是小型機或類似的東西:grep從shell腳本內的串行端口輸入5秒鐘

ttylog -b 115200 -d /dev/ttyS0 

我要5秒設備串行輸出寫入到一個臨時文件(或將它分配給一個變量),然後在那個文件中找到關鍵字,讓我知道設備的運行方式。我已經嘗試將輸出重定向到一個文件,同時在後臺運行該命令,然後休眠5秒並終止進程,但日誌行永遠不會寫入我的臨時文件。例如:

touch tempFile 
ttylog -b 115200 -d /dev/ttyS0 >> tempFile & 
serialPID=$! 
sleep 5 
#kill ${serialPID} #does not work, gets wrong PID 
killall ttylog 
cat tempFile 

文件被創建但從未填充任何數據。我還可以替換的ttylog行:

ttylog -b 115200 -d /dev/ttyS0 |tee -a tempFile & 

在兩種情況下我見過的任何日誌行記錄到標準輸出或日誌文件,除非我有錯ttylog運行的多個版本(見註釋行,d '哦)。

我不知道這裏發生了什麼。這似乎是我的腳本中重定向失敗。

我在正確的軌道上嗎?有沒有更好的方法來抽樣5秒的串口?

+0

爲什麼不給每個第N行添加一個時間戳並記錄104秒的數據,然後使用某個實用程序將它分成20-21個塊? – 2009-12-29 22:09:09

+0

如果你添加'jobs -l; 'serialPID = $!'後的echo $ serialPID'是否匹配PID? – 2009-12-29 22:53:53

+0

@lpthnc我有1到200個命令可以發佈,其中任何一個命令都可能向push-pop堆棧中添加更多命令,所以我只想一次處理一個命令。 該腳本還可以運行The Box並自動發出正在測試的命令。我真的想保持在「開始錄音 - 發佈命令 - 停止錄製 - grep獲得結果 - 更新統計信息」算法 – pica 2009-12-29 23:51:44

回答

3

聽起來好像ttylog緩衝其輸出。你有沒有試過用-f或--flush運行它?

+0

-f不是ttylog的有效標誌,或者我不明白你的問題? – pica 2009-12-30 00:23:18

+0

我只是在http://rocasa.org/ttylog – 2009-12-30 01:30:23

+0

D'oh尋找資料。 'strings/usr/sbin/ttylog'將-f選項顯示爲可用,但它不在手冊頁中。我會試一試。 – pica 2009-12-30 15:37:13

0

您可以嘗試使用expect附帶的unbuffer腳本。

+0

很快就會檢查出來。看起來很有希望。我做了,但是在David Norman建議的-f選項中找到了一個更簡單的解決方案。 – pica 2009-12-30 17:33:54