tail и grep, вероятно, буферизуют стандартный вывод, поэтому цикл while его не видит. Если у вас есть stdbuf
(, он должен быть доступен в Linux, но я не уверен в других системах ), попробуйте
stdbuf -o0 tail -F --max-unchanged-stats=5 somelogfile.log | stdbuf -o0 grep -B4 "FATAL" | while read ERROR ;do... ;done
Но есть еще одна проблема. :while read ERROR
будет считывать одну строку и присваивать ей значение ERROR каждый раз в цикле. Ваш grep печатает четыре строки перед строкой FATAL, поэтому вы будете отправлять пять электронных писем, а не одно.
Хорошо, теперь возникает вопрос: "учитывая файл DLL, реконструируйте его протокол, поэтому его можно использовать под Linux ».
DLL-файл без оборудования не так уж и полезен, потому что полная реконструкция двоичного файла требует много работы.
Вместо этого вы можете запустить его в Windows вместе с оборудованием и отслеживать обмен данными. Методом проб, ошибок и догадок можно будет выяснить протокол. В конце концов, это всего лишь радиоприемник, протокол не должен быть таким сложным.
Вы можете контролировать USB-соединение через usbsnoop . Эквивалент ttyACM
в Windows должен быть виртуальным последовательным портом или виртуальным COM-портом , я не уверен, что portmon работает с это, но это сусло попытка. Google, чтобы получить больше инструментов.
Существует также стековый обмен обратного проектирования .