11

Я на CentOS 6.4. По умолчанию приглашение пользователя root имеет символ # , то есть выглядит примерно так: [root@myserver ~]#  .

echo $PS1 распечатывает [\u@\h \W]\$ ; но если я сделаю PS1="[\u@\h \W]\$" (что не должно ничего менять), я получу приглашение, похожее на это: [root@myserver ~]$ .

Почему, когда я пытаюсь установить его сам (в конечном итоге я хотел бы изменить его на что-то более полезное), он интерпретирует $ буквально? Почти на каждой странице, которую я могу найти (например, Как: изменить / настроить пользовательское приглашение bash (PS1)), говорится, что \$ должно приводить к # для пользователя root.

2 ответа2

14

В своем вопросе вы подразумеваете, что вообще не цитируете строку; это явно неправильно, потому что тогда пробел будет отделять назначение аргумента "PS1 = [\u @\h" от команды "\W]\$". Пожалуйста, поймите, что каждый персонаж важен.

В любом случае, вероятно, вы используете двойные кавычки ("), а не одинарные ('). Они ведут себя очень по-разному, когда дело доходит до интерпретации оболочки, что вы набрали. С двойными кавычками, он будет пытаться делать умные вещи с последовательностями обратной косой черты / некоторых символов. Для этого назначения, поскольку в \u, \h и \W нет ничего особенного, они остаются нетронутыми; квадратные скобки могут иметь особое значение в разных местах, но не в этом случае, поэтому они также остаются на месте; но так как $ имеет множество значений, все они особенные, последовательность \$ интерпретируется как «игнорируйте особенность знака доллара и просто оставьте его там», и эта последовательность заменяется на анализ без дальнейшего один знак доллара. Результат всего этого присваивается PS1 , и, поскольку существует буквальный знак доллара, а не волшебная последовательность \$ , когда оболочка создает фактическое приглашение, вы просто получаете знак доллара, а не символ, зависящий от эффективного пользователя , Фактический синтаксический анализ немного сложнее, но это суть этого конкретного примера.

Что вы ввели: PS1="[\u@\h \W]\$ "
Что назначил оболочка: PS1 <- "[\u@\h \W]$ "
Что вы хотели: PS1 <- "[\u@\h \W]\$ "
Что вы должны ввести: PS1='[\u@\h \W]\$ '

Что вы должны делать дальше: прочитайте что-то вроде этого урока, чтобы узнать больше о цитировании оболочки.

0

Вы переключились на пользователя root с помощью sudo su , su или вошли в систему как root? Используйте id чтобы проверить, с какого компьютера вы вошли в систему, поскольку это может повлиять на то, какой профиль вы на самом деле редактируете.

Проверьте ответы на https://askubuntu.com/questions/305052/changing-behavior-of-bash-prompt-when-functioning-as-root

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .