Shell Prompt Line Wrapping Issue

前端 未结 9 1943
一生所求
一生所求 2021-01-30 03:30

I\'ve done something to break my Bash Shell Prompt in OS X (10.5.7) Terminal.

This is the PS1 that I had configured:

PS1=\'\\[\\e[1;32m\\]\\h\\[\\e[0m\\]         


        
相关标签:
9条回答
  • 2021-01-30 03:42

    It seems that you have correctly escaped and enclosed sequences.

    A workaround I use anyway it it to add a '\n' at the end. I find it clearer and lessen any problem with wrapping issues. The exact end of my PS1 is :

    '\n\[\033[0;30m\]$\[\033[0m\]
    

    An excellent howto you probably know :

    Bash prompt howto

    0 讨论(0)
  • 2021-01-30 03:44

    This stackoverflow thread seems relevant. As someone noted in that thread, the Bash FAQ at mywiki.wooledge.org discusses how to properly quote color codes in Bash prompts (FAQ 53), and the proper invocation of terminal colors (FAQ 37).

    0 讨论(0)
  • 2021-01-30 03:49

    Here's mine: it's the best one I've found, but the site where I originally found it was missing an escape character, leading to the line wrapping issue. I tinkered with it and finally got it working. It shows your user, path, and branch info with good contrast, color-wise.

    export PS1='\[\e[1;37m\]\[\e[1;32m\]\u\[\e[0;39m\]:\[\e[1;33m\]\w\[\e[0;39m\]\[\e[1;35m\]$(__git_ps1 " (%s)")\[\e[0;39m\] \[\e[1;37m\]|\[\e[0;39m\]\$'
    

    Also, add

    GIT_PS1_SHOWDIRTYSTATE=true
    

    To show a marker when a branch is "dirty" (changes to be committed exist)

    export HISTCONTROL=ignoredups
    

    Is also useful to ignore duplicates when scrolling up through bash history.

    bind "set completion-ignore-case on" 
    

    Helps too.

    Lastly,

    shopt -s checkwinsize
    

    May be helpful on OSX if issues persist.

    0 讨论(0)
  • 2021-01-30 03:56

    Line wrapping issues in Bash are nothing new. Your PS1 should work as is but there is a bug in Bash 3.2.49. Consult the mailing list, there's yet another bug regarding this which was confirmed to be fixed in 4.0.

    You can't do much more than tagging unprintable characters with \[ and \], the rest must be done by the prompting code.

    0 讨论(0)
  • 2021-01-30 03:59

    I noticed that there are some issues with the prompt cursor positioning even if there are no special character in the PS1 or PROMPT environment variable.

    If we output a file that does not have a end-of-line char at the end. It will confuse the prompt.

    You can reproduce this by doing:

    curl https://gist.githubusercontent.com/martinos/d4aa0a7d4d752b0d0d9f/raw/3198c39f84a080c44227a084a19fb3a0bb661ee5/wrapping_issue.txt

    and pressing the up key multiple times and you will see that the prompt get confused.

    You can see an example of this in action:

    https://asciinema.org/a/9mtjhi9dib6md4ocsbw210cca

    When this occurs, just press <CTRL-C> and the prompt will come back to normal.

    Note that ZShell does not have this issue.

    0 讨论(0)
  • 2021-01-30 03:59

    For future reference, this is what I use:

    export PS1="\[\033[0;31m\][\u@Project:\w]$\[\033[0m\] "

    This would display my shell prompt as:

    [ec2-user@Project:~]$

    Helps me distinguish between live and dev sites.

    0 讨论(0)
提交回复
热议问题