Вы получили неполный вывод строк как часть той же строки в том месте, где была напечатана новая строка. Части строки буферизуются внутри read
, , вот что она делает:
Утилита read должна считывать одну логическую строку со стандартного ввода
. ] Например, это выводит
через одну секунду, а не
.
(echo -n foo ; sleep 1 ; echo bar) | (read x ; echo "<$x>")
Если вы хотите перехватывать ввод меньшими частями, чем полные строки, вам нужно сделать что-то еще, например. с Перл. Это напечатает
(с новой строкой перед последней >
, так как в отличие от read
, Perl не обрабатывает последнюю новую строку особенно. Не должно иметь значения с окраской.)
(echo -n foo ; sleep 1 ; echo bar) |
perl -e '$|=1; while(sysread STDIN,$a,9999) { print "<$a>"}'
Если у вас есть управляющие коды для цветов (RED
и COLORRESET
), экспортированные в среду, вы можете использовать их из Perl сценарий как здесь:
perl -e '$|=1; while(sysread STDIN,$a,9999) {print "$ENV{RED}$a$ENV{COLORRESET}"}'