Operating a standard bash shell on a server, the PS1 prompt defaults to ending in a $ for non-root users, and # for root.


ubuntu@server:~$ sudo su

Why is this?


Historically the original /bin/sh Bourne shell would use $ as the normal prompt and # for the root user prompt (and csh would use %). This made it pretty easy to tell if you were running as superuser or not.

# is also the comment character, so anyone blindly re-entering data wouldn't run any real commands.

More modern shells (eg ksh, bash) continue this distinction of $ and # although it's less important when you can set more complicated values such as the username, hostname, directory :-)

  • Can you give an example of how # being the comment character prevents someone running real commands if they're blindly re-entering data? – John Gowers Jun 30 '16 at 15:07
  • 7
    What happens if you cut'n'paste the complete line # reboot - answer... nothing, 'cos the # is a comment. – Stephen Harris Jun 30 '16 at 15:09


The POSIX standard says (my emphasis):


This variable is used for interactive prompts. Historically, the "superuser" has had a prompt of #. Since privileges are not required to be monolithic, it is difficult to define which privileges should cause the alternate prompt. However, a sufficiently powerful user should be reminded of that power by having an alternate prompt.

See also this answer to virtually the same question on the SuperUser forum.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.