Se o seu terminal suportar o endereçamento do terminal, salvar o cursor e restaurar o cursor, isso pode funcionar:
PS1="$(tput sc;tput cup 0 0;tput rev;tput el)\u@\h \W$( tput rc;tput sgr0)\$ "
Mas cuidado com o fato de que o comando pode ser difícil de editar, pois o shell fica confuso sobre onde ele está no buffer de entrada.
Em bash
, você pode dizer para ignorar as seqüências de controle do cursor usando colchetes de barra invertida:
PS1="\[$(tput sc;tput cup 0 0;tput rev;tput el)\]\u@\h \W\[$( tput rc;tput sgr0)\]\$ "
Se isso não funcionar, tente enviar a saída diretamente para o terminal:
TOSL=$(tput sc;tput cup 0 0;tput rev;tput el)
FROMSL=$(tput sgr0; tput rc)
PS1='$(echo -n "$TOSL $LOGNAME@$HOSTNAME ${PWD/#$HOME/~}$FROMSL">/dev/tty)\$ '