Параллельный вывод UART с линейной буферизацией

У меня есть 4 устройства UART, и я хочу одновременно просматривать их выходные данные. Я использую следующий скрипт для выполнения этой работы:

# first kill the cat process from last run
killall -v cat

for i in `seq 0 3`; do
    cat /dev/crbif0rb0c$(i}ttyS0 | grep . --line-buffered &
    # cat /dev/crbif0rb0c$(i)ttyS0 &
done

Но я не получаю никакого результата от этого скрипта, кроме множества пустых строк. Когда я удаляю материал grep и использую вторую строку в цикле for, я получаю много выходных данных, но нечитаемых, поскольку все выходные данные испорчены.

Итак, мой вопрос: почему нет вывода (кроме пустых строк), когда я использую grep? Или кто-нибудь может предоставить лучшие (и работоспособные) решения для моего сценария?

Заранее спасибо!

[ОБНОВЛЕНИЕ] Я неожиданно обнаружил, что cat /dev/crbif0rb0c${i}ttyS0 | grep ^ --line-buffered & будет работать. Не знаю, почему...


person Jinghao Shi    schedule 03.05.2012    source источник


Ответы (1)


Как насчет tail -f /dev/crbif0rb0c{0,1,2,3} ?

person artbristol    schedule 03.05.2012
comment
Ваши UART печатают CR и/или LF? Потому что вывод не будет напечатан, пока они не закончат строку. - person artbristol; 04.05.2012
comment
Они печатают \n. Но ничего, проблема решается заменой . на ^ в grep. - person Jinghao Shi; 04.05.2012