Я на CentOS 6.4. По умолчанию приглашение пользователя root имеет #
символ, то есть выглядит примерно так [root@myserver ~]#
.
echo $PS1
распечатывает [\u@\h \W]\$
; но если я PS1="[\u@\h \W]\$"
(который не должен ничего менять, afaics), я в конечном итоге с запросом , который выглядит следующим образом : [root@myserver ~]$
.
Почему, когда я пытаюсь установить это сам (в конечном счете, я хотел бы изменить его на что-то более полезное), оно интерпретирует $
буквально? Практически на каждой странице, которую я могу найти (например, Как: изменить / настроить пользовательское приглашение bash (PS1) ), указано, что это \$
должно привести #
к появлению пользователя root.
PS1=[\u@\h \W]\$
возвращается-bash: W]$: command not found
.PS1="[\u@\h \W]\$"
.Ответы:
В своем вопросе вы подразумеваете, что вообще не цитируете строку; это явно неправильно, потому что тогда пробел будет отделять назначение аргумента "PS1 = [\ u @ \ h" от команды "\ W] \ $". Пожалуйста, поймите, что каждый персонаж важен.
В любом случае, вероятно, вы используете двойные кавычки ("), а не одинарные ('). Они ведут себя очень по-разному, когда речь идет о оболочке, интерпретирующей то, что вы ввели. С помощью двойных кавычек она будет пытаться делать умные вещи с последовательности обратной косой черты / некоторых символов. Для этого назначения, поскольку в \ u, \ h и \ W нет ничего особенного, они остаются нетронутыми; квадратные скобки могут иметь специальные значения в разных местах, но не в этом случае, поэтому они также оставлены на месте, но, поскольку a
$
имеет множество значений, все они особенные,\$
последовательность интерпретируется как «игнорировать особенность знака доллара и просто оставить его там», и эта последовательность заменяется на неразборчивый одиночный знак доллара. Результат всего этого присваиваетсяPS1
и, поскольку есть буквальный знак доллара, а не волшебная\$
последовательность, когда оболочка создает фактическое приглашение, вы просто получаете знак доллара, а не символ, зависящий от эффективного пользователя. Фактический синтаксический анализ немного сложнее, но это суть этого конкретного примера.Что вы набрали:
PS1="[\u@\h \W]\$ "
Что назначил оболочка:
PS1 <- "[\u@\h \W]$ "
Что вы хотели:
PS1 <- "[\u@\h \W]\$ "
Что вы должны набрать:
PS1='[\u@\h \W]\$ '
Что вы должны сделать дальше: Прочтите что-то вроде этого урока, чтобы узнать больше о цитировании оболочки.
источник
PS1="...\\\$"
для обеспечения того , чтобы в буквальном смысле пара\$
сохраняется вPS1
течение оболочки интерпретировать позже.Вы перешли к корневому пользователю с помощью
sudo su
,su
или войдя в систему под корень? Используйте,id
чтобы проверить, с какого компьютера вы вошли в систему, поскольку это может повлиять на то, какой профиль вы на самом деле редактируете.Проверьте ответы на /ubuntu/305052/changing-behavior-of-bash-prompt-when-functioning-as-root
источник