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

10

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

IE:

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

Почему это?

Джек
источник
Исторически или более прямо?
Джефф Шаллер

Ответы:

16

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

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

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

Стивен Харрис
источник
Можете ли вы привести пример того, как #символ комментария мешает кому-то выполнять настоящие команды, если они вводят данные вслепую?
Джон Гауэрс
6
Что произойдет, если вы обрежете и вставите всю строку # reboot- ответьте ... ничего, потому что #это комментарий.
Стивен Харрис
9

Традиция.

Стандарт POSIX говорит (мой акцент):

PS1

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

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

Кусалананда
источник
Чтобы добавить, это может быть найдено в Обосновании> C. Обоснование для Shell & Utilities> 2. Shell Command Language; Мне просто нужно было найти ссылку на него для чего-то другого :)
forquare
1
@forquare Спасибо. Я добавил правильную ссылку сейчас.
Кусалананда