declare -A _LINENOS _line_count=0 bold_green="\033[32;1m" bold_red="\033[31;1m" yellow="\033[33m" reset_font="\033[00m" track() { local str=$1 local desc=$2 local state='*' _LINENOS[${str}]=$_line_count _line_count=$((_line_count + 1)) echo "[${state}] ${desc}" } trackend() { local str=$1 local state=$2 local color='' if [ "x${state}" = "xt" ]; then state='+' color="${bold_green}" elif [ "x${state}" = "xf" ]; then state='-' color="${bold_red}" else state='?' color="${yellow}" fi local orig_line=${_LINENOS[${str}]} local ret_amount=$((_line_count - orig_line)) echo -en "\033[s" echo -en "\033[${ret_amount}F\033[1C${color}${state}${reset_font}" echo -en "\033[u" }