Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

My bash prompt, which I'll admit to have stolen from a few places and cobbled together, will sometimes add part of previous commands to its length when scrolling the bash history with up/down arrows.

For example, if my previous commands were:

ls
cd /home/caleb
vim .bashrc

When I was at my prompt and scrolled up twice it might look like:

$ vim .bcd /home/caleb

Where the first five characters are left over from last command.

Does anyone have any idea why this is happening, and how it can be stopped?

My prompt is set with this code (way to long to include here): https://gist.github.com/1679352

share|improve this question
1  
Set PS1 to a value without the whole vcs crap and see what happens. That's my guess. –  Daniel Beck Jan 26 '12 at 0:44
    
Have you already found the culprit in your prompt? I'm having the same issue. –  acme Jul 10 at 8:58
    
Yeah bash loses it on colors, and is unable to separate the length of strings with color escapes from the length of the visible string. This is what SiegeX was getting at. I ended up switching to ZSH and using a different prompt. ZSH doesn't have the same issue. –  Caleb Thompson Jul 11 at 13:45

2 Answers 2

up vote 3 down vote accepted

Somewhere your prompt is fubar. What usually happens is that your shell thinks its outputting non-printable term codes and expecting it to take up space. The best advice I can give you is to systematically add to (or take away from) your prompt until this behavior stops to isolate the code that is causing this issue.

share|improve this answer

I had the same problem and it was related to the color definitions.

In my case, I have a multi-line prompt (gives most space for current command regardless of path length displayed by prompt).

Bad version:

export PS1="\n\n\[\033[01;33m[\w]\n\033[00m\$ "

Good version:

export PS1="\n\n\[\033[01;33m[\w]\033[00m\n\$ "

\033[00m terminates the color. If it is after the new line (\n), it prevents proper redraw in the terminal, to overwrite previous commands with background color. Moving it behind the new line resolved the problem.

(using Terminal in Mac OS 10.8)

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.