Я использую Cygwin (версия 4.3.46) и хочу добиться следующего:
- В любой запущенной команде я хочу иметь возможность выделить вхождения ключевого слова 'warning' с помощьюжелтый и вхождения ключевого слова «error» с красным.
- Ключевое слово «warning» и «error» может иметь любой регистр. Например: Предупреждение, ПРЕДУПРЕЖДЕНИЕ, предупреждение. Ошибка, ОШИБКА, ошибка. Поэтому мне нужен механизм, включающий регулярное выражение для сопоставления всех этих.
- После выполнения команды я хочу показать количество ключевых слов 'warning' и 'error', которые были отображены и раскрашены.
Для 1 и 2 я передал команду sed.
Я запускаю команду, которую хочу выполнить следующим образом:
$ time 'command_to_execute' 'command_parameters'
Код, который я использую ниже:
alias time='Util_GetExecutionTime'
function Util_GetExecutionTime()
{
# Reset bash seconds counter
SECONDS=0
# Execute the command received as parameter, together with it's parameters
if [ $GS_COLOR_WARNINGS_ERRORS == "On" ]; then
"$@" | we red "ERROR " | we red "error" | we red "Error" | we yellow "WARNING " | we yellow "warning" | we yellow "Warning"
else
"$@"
fi
# Get the return code for the latest executed command
rc=$?
# Print execution time
echo ""
if [ "$rc" == "0" ];then
echo -e "${BLightGreen}Command successfully executed in $(($SECONDS / 3600))hrs $((($SECONDS / 60) % 60))min $(($SECONDS % 60))sec${NC}"
else
echo -e "${BRed}Command executed with errors in $(($SECONDS / 3600))hrs $((($SECONDS / 60) % 60))min $(($SECONDS % 60))sec${NC}"
fi
# Return the Return status of the executed command
return $rc
}
# Function for coloring the warnings and errors during test generation
function we()
{
declare -A fg_color_map
fg_color_map[red]=31
fg_color_map[yellow]=33
fg_c=$(echo -e "\e[1;${fg_color_map[$1]}m")
c_rs=$'\e[0m'
sed -u s"/$2/$fg_c\0$c_rs/g"
}
Одна вещь, которая расстраивает, - то, что этот механизм (для пункта 1 и 2) работает, но не всегда. Очень часто, после того, как я запускаю команду, консоль зависает и через некоторое время начинает отображать сообщения типа: «fork: Resource временно недоступен».
Для пункта 3 я понятия не имею, как его реализовать. Любая идея будет очень кстати.