string=whatever
stty size | {
read y x
tput sc # save cursor position
tput cup "$((y - 1))" "$((x - ${#string}))" # position cursor
printf %s "$string"
tput rc # restore cursor.
}
Isso assume que todos os caracteres em $string
são uma célula ampla (e que $string
não contém caracteres de controle (como nova linha, tabulação ...)).
Se a sua string puder conter caracteres de largura zero (como caracteres combinados) ou de largura dupla, você poderá usar o especificador de formato printf
%Ls
do ksh93 que formata formatos baseados ou largura de caractere:
string='whatéver'
# aka string=$'\uFF57\uFF48\uFF41\uFF54\uFF45\u0301\uFF56\uFF45\uFF52'
stty size | {
read y x
tput sc # save cursor position
tput cup "$((y - 1))" 0 # position cursor
printf "%${x}Ls" "$string"
tput rc # restore cursor.
}
Isso apagaria a parte inicial da última linha.