Чому встановлення запиту bash (PS1) вручну призводить до того, що у root буде розміщено $ замість #?


11

Я на CentOS 6.4. За замовчуванням запит користувача root має #символ, тобто він виглядає приблизно так [root@myserver ~]# .

echo $PS1роздруковує [\u@\h \W]\$; але якщо я PS1="[\u@\h \W]\$"(який не повинен нічого міняти, afaics), я в кінцевому підсумку з запитом , який виглядає наступним чином : [root@myserver ~]$.

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


PS1=[\u@\h \W]\$повертає -bash: W]$: command not found.
choroba

@choroba ой, вибачте, пропустив подвійні цитати, це мало бути PS1="[\u@\h \W]\$".
stripybadger

Відповіді:


14

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

У будь-якому випадку, ви, ймовірно, робите, це використовувати подвійні лапки ("), а не одиничні ("). Вони поводяться дуже по-різному, коли справа доходить до оболонки, що інтерпретує те, що ви ввели. За допомогою подвійних лапок вона намагатиметься робити розумні речі з Для цього завдання, оскільки \ n, \ h і \ W немає нічого особливого, вони залишаються недоторканими; квадратні дужки можуть мати особливі значення в різних місцях, але не в цьому випадку, тож вони також залишаються на місці, але оскільки а $має різноманітні значення, усі вони особливі, \$послідовність інтерпретується як "ігноруйте особливість знака долара і просто залиште його там", і цю послідовність замінюють на знаком єдиного долара без подальшого розбору. Результат всього цього призначенийPS1, а оскільки є буквальний знак долара, а не магічна \$послідовність, коли оболонка будує фактичну підказку, ви просто отримуєте знак долара, а не характер, залежний від ефективного користувача. Справжній розбір трохи складніший, але в цьому суть цього конкретного прикладу.

Що ви ввели: PS1="[\u@\h \W]\$ "
Що призначено оболонці: PS1 <- "[\u@\h \W]$ "
Що ви хотіли: PS1 <- "[\u@\h \W]\$ "
що слід ввести:PS1='[\u@\h \W]\$ '

Що слід зробити далі: прочитайте щось подібне до цього підручника, щоб дізнатися більше про цитування оболонок.


1
Так, ви опинилися на місці, я використовував подвійні цитати (вибачте, що пропустили їх у оригінальному запитанні), дякую, що вказуєте на мою помилку.
stripybadger

Якщо ви коли - небудь зробити , необхідно використовувати подвійні лапки , за якою - то причини, використання PS1="...\\\$"для забезпечення того , щоб в буквальному сенсі пара \$зберігається в PS1протягом оболонки інтерпретувати пізніше.
чепнер

0

Ви перейшли до кореневого користувачеві з допомогою sudo su, suабо увійшовши в систему під корінь? Використовуйте idдля перевірки того, хто на комп’ютері вважає вас зареєстрованим, оскільки це може вплинути на те, який профіль ви фактично редагуєте.

Перегляньте відповіді на /ubuntu/305052/changing-behavior-of-bash-prompt-when-functioning-as-root

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.