10

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

IE:

ubuntu@server:~$ sudo su
root@server:/home/ubuntu#

Why is this?

15

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 :-)

|improve this answer|||||
  • 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
  • 5
    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
9

Tradition.

The POSIX standard says (my emphasis):

PS1

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.

|improve this answer|||||
  • To add, this can be found under Rationale > C. Rationale for Shell & Utilities > 2. Shell Command Language; I just had to find a reference to it for something else :) – forquare Feb 13 '17 at 16:44
  • 1
    @forquare Thanks. I've added a proper link now. – Kusalananda Feb 13 '17 at 16:48

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.