Linux - Newbie This Linux forum is for members that are new to Linux.
Just starting out and have a question?
If it is not in the man pages or the how-to's this is the place! |
Notices |
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
Are you new to LinuxQuestions.org? Visit the following links:
Site Howto |
Site FAQ |
Sitemap |
Register Now
If you have any problems with the registration process or your account login, please contact us. If you need to reset your password, click here.
Having a problem logging in? Please visit this page to clear all LQ-related cookies.
Get a virtual cloud desktop with the Linux distro that you want in less than five minutes with Shells! With over 10 pre-installed distros to choose from, the worry-free installation life is here! Whether you are a digital nomad or just looking for flexibility, Shells can put your Linux machine on the device that you want to use.
Exclusive for LQ members, get up to 45% off per month. Click here for more info.
|
|
02-17-2017, 11:26 PM
|
#1
|
Member
Registered: Feb 2010
Posts: 30
Rep:
|
PS1 bash prompt with new line and color
I am trying to create a bash prompt with new line and color.
The first three prompts behave as expected:
Code:
PS1="[]\$ " # 1) simple prompt: []$
PS1="[]\n\$ " # 2) prompt with new line
PS1="\e[1;33m[]\$\e[m " # 3) prompt with color
PS1="\e[1;33m[]\n\$\e[m " # 4) prompt with new line and color fails
The fourth prompt fails. The prompt history does not displaying correctly when a command is more than 6 chars long:
Code:
$ export PS1="\e[1;33m[]\n\$\e[m "
[]
$ echo xx
xx
[]
$ ech
The last line is output after arrow up then arrow down. It should be blank, but it displays characters from the previous command.
What wrong with the exported prompt?
Thank you.
|
|
|
02-17-2017, 11:29 PM
|
#2
|
Senior Member
Registered: Dec 2009
Location: New Jersey, USA
Distribution: Fedora, OpenSUSE, FreeBSD, OpenBSD, macOS (hack). Past: Debian, Arch, RedHat (pre-RHEL).
Posts: 1,335
|
Bash can be funny with escape codes.
Try the suggestion here, http://stackoverflow.com/questions/7...ompt-correctly, see if that helps.
Last edited by goumba; 02-17-2017 at 11:33 PM.
|
|
|
02-18-2017, 12:28 AM
|
#3
|
Member
Registered: Feb 2010
Posts: 30
Original Poster
Rep:
|
Quote:
Originally Posted by goumba
|
Thanks for the quick response.
The link is about the \[...\] sequence.
My problem prompt "\e[1;33m[]\n\$\e[m " contains neither \[ nor \].
|
|
|
02-18-2017, 02:26 AM
|
#4
|
Member
Registered: Feb 2010
Posts: 30
Original Poster
Rep:
|
This works:
Code:
export PS1="\e[1;33m[]\e[m\n\$ "
The '$' is not colored, but that's OK.
|
|
|
02-18-2017, 03:49 AM
|
#5
|
LQ Guru
Registered: Sep 2009
Location: Perth
Distribution: Arch
Posts: 10,024
|
Unless you are expanding any variables inside (which can be problematic and a pain) I would suggest using single quotes so as to not have anything interpreted prior to being assigned.
|
|
|
02-18-2017, 07:12 AM
|
#6
|
LQ Veteran
Registered: Jan 2011
Location: Abingdon, VA
Distribution: Catalina
Posts: 9,374
Rep:
|
|
|
2 members found this post helpful.
|
02-18-2017, 07:44 AM
|
#7
|
Senior Member
Registered: Dec 2009
Location: New Jersey, USA
Distribution: Fedora, OpenSUSE, FreeBSD, OpenBSD, macOS (hack). Past: Debian, Arch, RedHat (pre-RHEL).
Posts: 1,335
|
Quote:
Originally Posted by wolfv
Thanks for the quick response.
The link is about the \[...\] sequence.
My problem prompt "\e[1;33m[]\n\$\e[m " contains neither \[ nor \].
|
No, yours does not. As the link explains, it may or may not help with your problem. The line length can get all screwy with escape codes, and enclosing the non printing (in this case the color) codes in the escaped brackets can help with the problem. It did so for me with my colored prompt.
|
|
|
02-18-2017, 07:51 AM
|
#8
|
Senior Member
Registered: Feb 2003
Distribution: debian
Posts: 4,137
|
Try \033 instead of \e. What I had to do for a bash script that does color. It's the octal value for e.
|
|
|
02-18-2017, 11:18 AM
|
#9
|
Member
Registered: Feb 2010
Posts: 30
Original Poster
Rep:
|
solved
Quote:
Originally Posted by goumba
The line length can get all screwy with escape codes, and enclosing the non printing (in this case the color) codes in the escaped brackets can help with the problem. It did so for me with my colored prompt.
|
goumba,
Now I see what you mean. Thanks for your patients.
This works as intended:
Code:
$ export PS1="\[\e[1;33m\][]\n$\[\e[m\] "
[]
$ echo xx
xx
[]
$
The last line is output after arrow up then arrow down. It is blank as expected.
The command prompt dissected:
Code:
export PS1="\[ \e[1;33m \] [] \n $ \[ \e[m \] "
\[ zero-length \] \[ zero-length \]
\e[1;33m yellow \e[m
[] newline $
Thank you all for your helps.
Last edited by wolfv; 02-18-2017 at 11:35 AM.
|
|
|
02-19-2017, 07:38 AM
|
#10
|
LQ Veteran
Registered: Jan 2011
Location: Abingdon, VA
Distribution: Catalina
Posts: 9,374
Rep:
|
Good job and well done.
I had to do some kungfu on my PS1 to get this a few years ago.
Code:
DOS='C:${PWD//\//\\\}>'
PS1="\[\033[00m\]\[\033[00m\]\[\033[01;39m\]$DOS\[\033[00m\]"
which I worked on from the authoritative ArchWiki article.
Have fun!
PS1 was the first thing I "programmed" in Linux.
Enjoyed it every minute.
|
|
|
All times are GMT -5. The time now is 03:29 AM.
|
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.
|
Latest Threads
LQ News
|
|