У меня проблемы с grep-фильтрацией make-вывода. Особенно,
make target 2>&1 | grep -E --color=never "^make.*"
работает как положено, но следующее не выведет вывод на консоль:
make target 2>&1 | grep -E --color=never "^make.*" | cat
Я что-то упускаю из виду? Почему первая команда выводит, а не вторая? Это связано с какой-то буферизацией ввода-вывода? Или я просто тупой?
[РЕДАКТИРОВАТЬ]: cat
- это минимальный заполнитель тестового случая для фактической команды, которую я хочу использовать.
[EDIT]: похоже, это не проблема для grep, так как замена его на ack приводит к тому же поведению.
[РЕДАКТИРОВАТЬ]: Сценарий, который кошка является заполнителем для
#!/bin/bash
cat - \
| grep -E --color=never "^.*warning:.*|^.*error:.*|^make.*[Ee]rror.*|^make.*" \
| hilite.sh -r "^.*warning:.*" -f yellow -B \
| hilite.sh -r "^.*error:.*" -f red -B \
| hilite.sh -r "^make.*[Ee]rror.*" -f red -B \
| hilite.sh -r "^make.*" -f magenta
[РЕДАКТИРОВАТЬ]: Я думаю, что это проблема буферизации / ввода-вывода. Я оставляю сборку, работающую над w / e, и посмотрю, получит ли она в конечном итоге результат, который ему необходим!