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?
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 :-)
#
being the comment character prevents someone running real commands if they're blindly re-entering data?
Commented
Jun 30, 2016 at 15:07
# reboot
- answer... nothing, 'cos the #
is a comment.
Commented
Jun 30, 2016 at 15:09
john->
. He used to complain that all my scripts stopped working after two or three days. That would be because he kept pasting > myScript
onto his command line.
Commented
May 24, 2021 at 14:13
bash: ...: command not found
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.