[arch-general] bash variable PS1 confuses the terminal somehow

Ray Kohler ataraxia937 at gmail.com
Wed Sep 28 09:36:52 EDT 2011

On Wed, Sep 28, 2011 at 9:22 AM,  <bfsc.yb at gmail.com> wrote:
> 14         if (($?)); then
> 15                 warn="^[[31mWARNING^[[m"
> 16         else
> 17                 warn=
> 18         fi
> 19         date=`date`
> 20         PS1="^[[s^[[$(($COLUMNS-28))C^[[0;33m$date^[[u^[[0;31m$warn^[[0;32m[^[[1;33m\u^[[0;32m@^[[1;36m\w^[[0;32m]\$^[[m"
> 21 '
>  i'm using this PROMPT_COMMAND to set PS1 everytime it is played, it seems to work perfectly except later i found a strange behavior of the terminal, both in xterm under X and agetty under the console. for example, when under the console, i found the terminal column indicated by the bash variable $COLUMNS is 160, however, when i type some command about 50 characters long, the line which i'm typing wraps to the begining, and destroys what i typed earlier, this makes typing long commands really difficult...and everything is just fine when i just set the PS1 variable to a very simple value without escape sequences.
>  anyone knows how to fix this?

Put \[ and \] around all the sections that don't actually print things
to the terminal, so bash knows not to count them when determining how
long the prompt is.

More information about the arch-general mailing list