#!/bin/bash # Clears the entire current line regardless of terminal size. # See the magic by running: # { sleep 1; clear_this_line ; }& clear_this_line(){ printf '\r' cols="$(tput cols)" for i in $(seq "$cols"); do printf ' ' done printf '\r' } # Erases the amount of lines specified. # Usage: erase_lines [AMOUNT] # See the magic by running: # { sleep 1; erase_lines 2; }& erase_lines(){ # Default line count to 1. test -z "$1" && lines="1" || lines="$1" # This is what we use to move the cursor to previous lines. UP='\033[1A' # Exit if erase count is zero. [ "$lines" = 0 ] && return # Erase. if [ "$lines" = 1 ]; then clear_this_line else lines=$((lines-1)) clear_this_line for i in $(seq "$lines"); do printf "$UP" clear_this_line done fi } erase_lines "$1"