2017-02-14 2 views
1

Когда я делаю svn up, я получаю ~ 100 строк в среднем. Кроме того, есть x-teen externals, которые обновляются для ~ 30s total (они появляются один за другим каждые 2-3 секунды).Как цветной вывод оболочки во время выполнения

Я думал о окрашивании (возможно, преобразовании) этого выхода, чтобы я мог видеть его более четко.

Я знаю, что могу использовать sed, но это требует отвратительного форматированного регулярного выражения - много экранов.
perl, с другой стороны, занимает намного более чистое регулярное выражение, но ожидает полного ввода перед печатью вывода. Я получаю 30 секунд ничего, и весь вывод BAM появляется сразу.

up.sh

#!/bin/bash 

svn up [email protected] \ 
    | grep -vE "^\s*$|revision" \ 
    | ${arhbin}/coloring/svn.sh \ 

$ {arhbin} /coloring/color_definitions.sh

#!/bin/bash 
source ${arhbin}/coloring/color_definitions.sh 

cat \ 
    | perl -pe 's/(^ *A.*$)/'$GREEN'\1'$NORMAL'/igs' \ 
    | perl -pe 's/(^ *D.*$)/'$RED'\1'$NORMAL'/igs' \ 
    | perl -pe 's/(^ *C.*$)/'$RED_BG'\1'$NORMAL'/igs' \ 
    | perl -pe 's/(^ *[?].*$)/'$BLUE'\1'$NORMAL'/igs' \ 
    | perl -pe 's/(^ *G.*$)/'$BLUE'\1'$NORMAL'/igs' \ 

Как я могу окрасить вывод команды во время выполнения с помощью Perl/Python, как регулярное выражение?

+0

Вы в Linux? – hek2mgl

+1

Начну с того, что ничего не забуферировано. – simbabque

+0

@ hek2mgl да, красная шляпа, если быть точным –

ответ

1

В Linux вы можете использовать stdbuf для настройки буферизации. Например:

stdbuf -oL svn up "[email protected]" | perl ... 
+1

Отлично, 'stdbuf' именно то, что мне нужно, спасибо. Это фактическое рабочее решение: 'svn up $ @ | stdbuf -oL grep -vE "^ \ s * $ | revision" (...) ' –

+0

Рад видеть, что это вам помогло! – hek2mgl

Смежные вопросы