2017-06-06 37 views
-1

我需要讀取文件並存儲在另一個文件上。對於我使用cat,問題是,讀取該文件是二進制的,那並不包含EOF,所以對這個代碼:如何捕捉循環中的二進制文件

for i in $(seq 0 100) 
do 
    cat </dev/ttyO5> $FILE # I'm reading from a serial port, yes 
done 

貓也從未停止,我怎麼能阻止它如此這般的下一次迭代等等?

謝謝!

+2

如果您想在EOF之前停止閱讀,您將如何知道您應該停止? 「貓」命令在哪裏「完成」了? –

+0

這就是問題,沒有任何eof。我在串行電纜上傳輸文件,機器處於原始模式,所以他們不識別'EOF' – Lomezno

+1

您是否正在嘗試只讀取特定數量的字節,或者直到看到特定模式或某段時間或類似的東西?如何停止不同於知道何時該如此做。知道何時停止可能會影響解決方案。例如,如果是時候你可以使用'timeout',如果它是字節,也許你應該使用'read -n'等。基本上,你怎麼知道是時候進入下一個迭代了,因爲你完成了這個? –

回答

-1

cat置於後臺。添加另一個循環,每分鐘左右檢查文件大小。 (無論你認爲合理的時間。)如果該文件沒有在那個時候增長,用kill -9 $!殺死貓。

+0

既然你現在告訴我們你知道字節數,用'wc -c檢查文件中的字節數$ file'。如果該數字與您想要傳輸的號碼相匹配,請殺死'cat'進程。如果超時,請檢查文件大小,如果不是預期的那麼打印出錯信息。 – Jack