I’m looking for inspiration for a custom Bash prompt[1]. I’d love to see yours! 😊 If possible, include both the prompt’s PS1
, and a screenshot/example of what it looks like.
References
- Type: Documentation. Title: “Bash Reference Manual”. Publisher: Gnu Project. Edition: 5.2. Published: 2022-09-19. Accessed: 2025-03-21T02:46Z. URI: https://www.gnu.org/software/bash/manual/html_node/index.html.
- §6.9 “Controlling the Prompt”. URI: https://www.gnu.org/software/bash/manual/html_node/Controlling-the-Prompt.html.
Crossposts:
Prompt is pretty simple, mainly just adjusted coloring and added a timestamp.
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;36;01m\]\t \[\033[01;32m\]\u@\[\033[01;37;01m\]\h\[\033[00m\]:\[\033[01;36m\]\w\[\033[00m\]\$ '
export PS1="\[\e[31m\][\[\e[m\]\[\e[38;5;172m\]\u\[\e[m\]@\[\e[38;5;153m\]\h\[\e[m\] \[\e[38;5;214m\]\W\[\e[m\]\[\e[31m\]]\[\e[m\]\\$ "
That’s a warcrime.
How so? What does this do?
Best I can tell is it’s a normal `username@hostname current_directory$ sorta prompt with some coloring: • Red for the square brackets • Orange (color 172) for the username • Light blue (color 153) for the hostname • Amber (color 214) for the current working directory
Other than being hard to read from the embedded coloring I’m not sure why this is a war crime.
Mine shows the full path and a new line for commands.
It will also print the exit code of the last command in red above the prompt, if the exit code is not 0.
PS1='$(ec=“$?”; if [ $ec -gt 0 ]; then echo -e “\n”[\e[91m]“exit code: $ec”[\e[0m]; fi)\n[\e[92m]\u[\e[38;5;213m]@[\e[38;5;39m]\h[\e[0m]:$PWD\n$ ’
Ok after viewing your prompts I noticed that mine is kinda lame
I didn’t even know I needed to edit my prompt, but now I don’t know how I have lived with it for so long.
My shit is custom and rather elaborate.
From left-to-right:
- name@server-name
- Uptime (multiplied by 10 and rounded to the nearest integer to save space)
- Percentage disk space available on
/
- Number on established network connections
- Git branch
:
commit - Python virtualenv
- [new line]
- date and time
The code for this is on GitLab.
Mine is just status(if not zero) and wd
[username@host ~]$ >
computer /usr/share/ $>
Mine’s really simple; I just make the path bold and yellow:
What I like to do is change the colour depending on the machine I ssh into, e.g. make the path red on my Raspberry Pi.
I use zsh, but my old Bash prompt looks almost the same as my Zsh prompt. Sorry, no screenshot, but here’s the code:
export PS1='\[\033[01;34m\][\[\033[01;37m\] \W\[\033[01;34m\]]\$\033[01;34m\] $(git branch 2>/dev/null | grep '^*' | colrm 1 2)\n\033[01;34m└─>\033[37m '
My bash prompt is just me copying the prompt I have set on fish.
# Prompt green=$'\e[38;5;2m' bright_red=$'\e[38;5;9m' bright_green=$'\e[38;5;10m' reset=$'\e[0m' prompt_command() { local exit_status=$? if [[ $exit_status != 0 ]]; then exit_color=$bright_red exit_prompt=" [$exit_status]" else exit_color=$bright_green exit_prompt="" fi } PROMPT_COMMAND=prompt_command PS1='\[$green\]\w\[$exit_color\]$exit_prompt\n❯ \[$reset\]'
I have a small issue with this prompt though. Sometimes the ❯ ends up turning white for some reason.
$
or#
, depending on whether I’m root.Mine’s pretty simple:
## .bashrc export BLA=$(tput setaf 0) # Black export RED=$(tput setaf 1) # Red export GRE=$(tput setaf 2) # Green export YEL=$(tput setaf 3) # Yellow export BLU=$(tput setaf 4) # Blue export MAG=$(tput setaf 5) # Magenta export CYA=$(tput setaf 6) # Cyan export WHI=$(tput setaf 7) # White export BOL=$(tput bold) # Bold export ITA=$(tput sitm) # Italic export UL=$(tput smul) # Underline export NC=$(tput sgr0) # No color & format _branch() { local branch=$(__git_ps1 "%s") if [[ -z $branch ]]; then printf "${BLA}null${NC}" else printf "${CYA}$branch" fi } PS1='.\[$(_pwd)\] \[$BLA\]〜 \[$MAG\]git\[$BLA\]:\[$(_branch)\] \n \[$NC$CYA\]\! \[$MAG\]\$ \[$NC\]' ## .inputrc set vi-ins-mode-string \1\e[34m\2.INS set vi-cmd-mode-string \1\e[33m\2.CMD
export PS1="\[\e]0;\u@\h:\w\a\]\[\e[1;34m\]\u@\h:\w\[\e[0m\]\$ "
I am a simple man.