Linux - GeneralThis Linux forum is for general Linux questions and discussion.
If it is Linux Related and doesn't seem to fit in any other forum then 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.
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.
This changes the color of 'root@hostname' to bright red, and the color of the pwd to bright yellow. That way I'm less likely to do things as root that I really don't want to do.
It depens on the way I've been logged into the system :-D
normal user: me@pts/1 foldername $
root user: root@pts/1 foldername $
and remotely, me@hal9000 foldername $
The title of the xterm / konsole will also display the tty, host, and full path name. (only the last folder is shown in the prompt)
Code:
#!/bin/bash
PS1='\u@\h:\w\$ '
if [ "$TERM" = "xterm" -o "$TERM" = "xrvt" -o "$TERM" = "$SCREEN" ]; then
## Only update the title in an xterm.
PS1_TITLE='\[\e]2;\u@\H:pts/\l \w\a'
# PS1_TITLE='\[\e]2;\u@\H \w\a\e[32;1m\]>\[\e[0m\]'
else
PS1_TITLE=''
fi
if [ -z "$SSH_CONNECTION" ]; then
# local, don't display host, but tty device.
PS1_TTY="`tty | sed -e 's/\/dev\///'`"
if [ "`id -u`" = "0" ]; then
# Red root prompt
PS1_USER='\[\033[1;31m\]\u'
PS1_AT='\[\033[0;31m\]@'
PS1_HOST='\[\033[1;31m\]'
else
# Green user prompt
PS1_USER='\[\033[1;32m\]\u'
PS1_AT='\[\033[0;32m\]@'
PS1_HOST='\[\033[1;32m\]'
fi
PS1_HOST="$PS1_HOST$PS1_TTY"
unset -v PS1_TTY
else
# SSH connection, different color and display host.
if [ "`id -u`" = "0" ]; then
# Red/gray root prompt
PS1_USER='\[\033[1;31m\]\u'
PS1_AT='\[\033[0;31m\]@'
else
# green/gray user prompt
PS1_USER='\[\033[1;32m\]\u'
PS1_AT='\[\033[0;32m\]@'
fi
PS1_HOST='\[\033[1;30m\]\h'
fi
PS1_PATH='\[\033[1;34m\]\W' # show dir in blue
PS1_RESET='\[\033[0m\]'
# concatenate.
PS1="$PS1_TITLE$PS1_USER$PS1_AT$PS1_HOST$PS1_RESET $PS1_PATH \\$ $PS1_RESET"
unset -v PS1_TITLE PS1_USER PS1_AT PS1_HOST PS1_PATH PS1_RESET
#PS1='\033]2;\w\007\[\033[1;32m\]\u@\h \[\033[1;34m\]\W \$ \[\033[0m\]'
# Other magical prompts:
PS2='> '
PS4='\[\033[0;34m\]+\[\033[0m\] '
export PS1 PS2 PS4
Distribution: openSuSE Tumbleweed-KDE, Mint 21, MX-21, Manjaro
Posts: 4,629
Rep:
Hey, interested noobs (like me)
Note, that PS1 (the control-string for your prompt) can be set at differing places for different users on your system. Here is what I could make out (without actual access to my system):
/etc/bashrc is used to set the prompt for the "true" consoles reached via <Alt><Crtl><Function key 1 through 6>
/root/bashrc is used to set the prompt for root with graphical login (under KDE)
/home/user/bashrc is used to set the prompt for user (your user-id here)
Please note, that some systems place a "." (without the "'s) in leading position of bashrc, thus generating .bashrc (dot-bashrc), which might be hidden in the file manager (activate "show hidden files") and to the ls-command (that's a small "L") so use the -a option (ls -a).
I do not know where PS2, PS3 ... PSN are set and what they are good for, exactly. Any takers?
@moderators (and gurus): checking and editing this post directly as necessary for errors and improvements is welcome.
PS2 is your secondary prompt, if you enter commands on multiple lines. for example, if statements, or while loops. (they require a 'counterpart'; a command that ends the statement)
PS4 is used if you enable "set -x", which shows all commands being executed.
from the bash manual you'll see what files are used. (just type "G" to skip to the end) files in /etc/ are usually global, and affect everyone using bash. files in your home directory overrule these global settings.
if you run bash from a login session (or bash -l), /etc/profile will be read, and from your home direcory: ~/.bash_profile, or ~/.profile.
In slackware, there is a /etc/profile.d/ directory where all *excutable scripts* are being executed by /etc/profile too. Some distributions don't have this, but you could add a few lines at the end of /etc/profile very easy:
Code:
# Append any additional sh scripts found in /etc/profile.d/:
for file in /etc/profile.d/*.sh ; do
if [ -x $file ]; then
source $file
fi
done
...guess once, by bash prompt color script is located at /etc/profile.d/bash-prompt-color.sh this affects all users.
a script can be made executable with this command: chmod +x <insert filename here>
Cool stuff guys, but one quick question...
Mine is the standard pibby@localhost thing and I am wondering how I change the "localhost" part. For instance TrickyKid has drew@trickykid. Local host is so boring, I hope there is a way to change that.
Thanks in advance for any help you can offer
Well, you could either change your actual hostname, or just use some of these tricks posted here. I am not positive about Mandrake, but I know in Slack there is a HOSTNAME file in /etc that you can edit to change it from localhost. I actually used netconfig, but I think thats a Slack-specific script.
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.