На основе обертки andrewdotn
Изменения:
echo -e
обработки содержимого в строках wrapper
#!/bin/bash
"${@}" 2> >(
while read line; do
echo -ne "\033[31m" 1>&2
echo -n "${line}" 1>&2
echo -e "\033[0m" 1>&2
done
)
Проблемы: выходные строки группируются, а не смешанные stdout / stderr
Тестовый скрипт:
#!/bin/bash
echo Hi
echo "\033[32mStuff"
echo message
echo error 1>&2
echo message
echo error 1>&2
echo message
echo error 1>&2
Выход:
Hi
\033[32mStuff
message
message
message
error # <- shows up red
error # <- shows up red
error # <- shows up red
Насколько я знаю, Java 8 не имеет оптимизации хвостового вызова. Afaik это не связано с фактическим трюком компилятора, потому что это просто, но для сохранения вызова в целях безопасности. Но я предполагаю, что это возможно с перезаписью байт-кода.
Java не поддерживает TCO на уровне компилятора, но его можно реализовать с помощью Java 8 с использованием лямбда-выражений. Он описывается Venkat Subramaniamin в «Функциональное программирование на Java».