Por que $ é o símbolo padrão para um shell de usuário e # o símbolo padrão para um shell raiz?

10

Operando um shell bash padrão em um servidor, o prompt do PS1 é padronizado com $ para usuários não root e # para root.

IE:

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

Por que é isso?

Jack
fonte
Historicamente ou mais diretamente?
Jeff Schaller

Respostas:

16

Historicamente, o shell Bourne / bin / sh original usaria $como o prompt normal e #para o prompt do usuário root (e o csh usaria %). Isso tornou muito fácil saber se você estava executando como superusuário ou não.

# também é o caractere de comentário, portanto, qualquer pessoa que digitar cegamente os dados não executará nenhum comando real.

Os shells mais modernos (por exemplo, ksh, bash) continuam essa distinção $e, #embora seja menos importante quando você pode definir valores mais complicados, como nome de usuário, nome do host, diretório :-)

Stephen Harris
fonte
Você pode dar um exemplo de como #o caractere de comentário evita que alguém execute comandos reais se estiver reinserindo dados cegamente?
John Gowers
6
O que acontece se você cortar e colar a linha completa # reboot- responda ... nada, porque #é um comentário.
Stephen Harris
9

Tradição.

O padrão POSIX diz (minha ênfase):

PS1

Essa variável é usada para prompts interativos. Historicamente, o "superusuário" recebeu um prompt de '#'. Como os privilégios não precisam ser monolíticos, é difícil definir quais privilégios devem causar o prompt alternativo. No entanto, um usuário suficientemente poderoso deve ser lembrado desse poder por ter um prompt alternativo.

Veja também esta resposta para praticamente a mesma pergunta no fórum SuperUser.

Kusalananda
fonte
Para adicionar, isso pode ser encontrado em Racional> C. Racional para Shell e Utilitários> 2. Linguagem de Comando do Shell; Eu só tinha que encontrar uma referência a ele para outra coisa :)
forquare
1
@forquare Obrigado. Adicionei um link adequado agora.
Kusalananda