2012-11-15 27 views
6

Tôi cần tập lệnh bash để đọc luồng dữ liệu từ Cổng Nối tiếp (RS232 to USB adapter - Cổng:/dev/ttyUSB0). Dữ liệu phải được lưu trữ từng dòng trong một tệp cho đến khi một đầu vào cụ thể (ví dụ "eof") xuất hiện. Tôi có thể cung cấp bất kỳ đầu vào bên ngoài vào Cổng nối tiếp. Cho đến bây giờ tôi sử dụng con mèo để đọc dữ liệu, hoạt động tốt.Tập lệnh Bash: lưu luồng từ Cổng Nối tiếp (/ dev/ttyUSB0) để gửi cho đến khi một đầu vào cụ thể (ví dụ eof) xuất hiện

cat /dev/ttyUSB0 -> file.txt 

Vấn đề là, mà tôi cần để kết thúc lệnh bản thân mình bằng cách nhập CNTR + C, nhưng tôi không biết chính xác khi dòng dữ liệu kết thúc và file ttyUSB0 không gerenate một EOF. Tôi đã cố gắng thực hiện điều này bản thân mình, nhưng không tìm thấy một giải pháp thuận tiện. Các công trình lệnh sau đây, nhưng tôi không biết làm thế nào để sử dụng nó cho vấn đề của tôi ("thế giới" sẽ tạo ra một lỗi "Không tìm thấy lệnh"):

#!/bin/bash 
cat > file.txt << EOF 
hello 
EOF 
world 

Các mã sau đây làm việc cho vấn đề của tôi, nhưng mất quá nhiều thời gian (luồng dữ liệu bao gồm ~ 2 triệu dòng):

#!/bin/bash 
while read line; do 
    if [ "$line" != "EOF" ]; then 
      echo "$line" >> file.txt 
    else 
      break 
    fi 
done < /dev/ttyUSB0 

Có ai có khả năng thuận tiện cho sự cố của tôi không?

Trả lời

5

Hãy thử awk(1):

awk ` 
/EOF/ {exit;} 
{print;}` </dev/ttyUSB0> file.txt 

này dừng khi nó thấy dòng EOF và in tất cả mọi thứ khác để file.txt

+0

Làm việc hoàn hảo, cảm ơn rất nhiều !!! – user1822048

Các vấn đề liên quan