0

I found out that in bash, the $PS1 variable can be modified to change the prompt. The problem is that I'm having some trouble trying to understand the long string of codes that I was given.

I did:

echo "$PS1"

and I got: \[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$. The terminal displays it as user@hostname:~$.

If someone could help me figure out what it means, it would be much appreciated.

Thanks, Depths :-)

2 Answers 2

1

Meanings of those codes could be found in PROMPTING section of bash manual (man bash)

PROMPTING
       When executing interactively, bash displays the primary prompt PS1 when it is ready to read a command, and the
       secondary  prompt PS2 when it needs more input to complete a command.  Bash displays PS0 after it reads a com‐
       mand but before executing it.  Bash displays PS4 as described above before tracing each command  when  the  -x
       option  is  enabled.  Bash allows these prompt strings to be customized by inserting a number of backslash-es‐
       caped special characters that are decoded as follows:
              \a     an ASCII bell character (07)
              \d     the date in "Weekday Month Date" format (e.g., "Tue May 26")
              \D{format}
                     the format is passed to strftime(3) and the result is inserted into the prompt string; an  empty
                     format results in a locale-specific time representation.  The braces are required
              \e     an ASCII escape character (033)
              \h     the hostname up to the first `.'
              \H     the hostname
              \j     the number of jobs currently managed by the shell
              \l     the basename of the shell's terminal device name
              \n     newline
              \r     carriage return
              \s     the name of the shell, the basename of $0 (the portion following the final slash)
              \t     the current time in 24-hour HH:MM:SS format
              \T     the current time in 12-hour HH:MM:SS format
              \@     the current time in 12-hour am/pm format
              \A     the current time in 24-hour HH:MM format
              \u     the username of the current user
              \v     the version of bash (e.g., 2.00)
              \V     the release of bash, version + patch level (e.g., 2.00.0)
              \w     the  current  working  directory,  with  $HOME  abbreviated  with a tilde (uses the value of the
                     PROMPT_DIRTRIM variable)
              \W     the basename of the current working directory, with $HOME abbreviated with a tilde
              \!     the history number of this command
              \#     the command number of this command
              \$     if the effective UID is 0, a #, otherwise a $
              \nnn   the character corresponding to the octal number nnn
              \\     a backslash
              \[     begin a sequence of non-printing characters, which could be used to embed a terminal control se‐
                     quence into the prompt
              \]     end a sequence of non-printing characters

       The  command number and the history number are usually different: the history number of a command is its posi‐
       tion in the history list, which may include commands restored from the history file (see HISTORY below), while
       the command number is the position in the sequence of commands executed during the current shell session.  Af‐
       ter the string is decoded, it is expanded via parameter expansion, command substitution, arithmetic expansion,
       and  quote removal, subject to the value of the promptvars shell option (see the description of the shopt com‐
       mand under SHELL BUILTIN COMMANDS below).
1

You need to go through the entire string character by character, control code by control code. Two man pages will help: man bash, and man console_codes. See e.g. man bash:

PROMPTING
.
.
.
   \e     an ASCII escape character (033)
.
.
.
   \[     begin a sequence of non-printing characters, which could be used to embed a terminal control sequence into the prompt
      

etc. , or man console_codes for e.g. "ECMA-48 Set Graphics Rendition" codes like ESC [01;32m to set foreground colour to bold green.

Basically your above PS1 string sets icon name and window title to user at host:working directory, then the prompt to user at host in bold green , followed by the working directory in bold blue, followed by a $ sign.

1
  • I'm rather confused by the number of times \a keeps appearing in $PS1 strings. There doesn't seem to be any reason to output a "bell" sound, and I never actually hear one being output when the prompt is displayed anyway.
    – AJM
    Commented Dec 14, 2023 at 15:07

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .