Почему $ является символом по умолчанию для пользовательской оболочки, а # — символом по умолчанию для корневой оболочки?

Почему $ является символом по умолчанию для пользовательской оболочки, а # — символом по умолчанию для корневой оболочки?

При работе со стандартной оболочкой bash на сервере приглашение PS1 по умолчанию заканчивается на $ для пользователей без прав root и на # для пользователей с правами root.

IE:

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

Почему это?

решение1

Исторически оригинальный /bin/sh Bourne shell использовал бы $в качестве обычного приглашения и #для приглашения пользователя root (а csh использовал бы %). Это довольно легко позволяло определить, работаете ли вы как суперпользователь или нет.

#также является символом комментария, поэтому любой, кто вслепую повторно вводит данные, не выполнит никаких реальных команд.

Более современные оболочки (например, ksh, bash) продолжают это различие $, #хотя оно и менее важно, когда вы можете задать более сложные значения, такие как имя пользователя, имя хоста, каталог :-)

решение2

Традиция.

Стандарт POSIX гласит:(выделено мной):

ПС1

Эта переменная используется для интерактивных подсказок. Исторически "суперпользователь" имел подсказку #. Поскольку привилегии не обязаны быть монолитными, сложно определить, какие привилегии должны вызывать альтернативную подсказку.Однако достаточно опытному пользователю следует напомнить об этой возможности, предусмотрев альтернативную подсказку.

Смотрите такжеэтот ответпрактически на тот же вопрос на форуме SuperUser.

Связанный контент