Как сохранить пользовательский PS1 в режиме суперпользователя?

Проблема заключается в следующем:

Я установил пользовательский PS1 в свой .bashrc, но он меняет значение по умолчанию, когда я вхожу в режим суперпользователя.

Я ожидал:

 ╓[coffee]─[Linux-Tower]─[2014-11-05, 23:41]─[~] ╙[$]-[sudo su [sudo] password for coffee: ╓[root]─[Linux-Tower]─[2014-11-05, 23:41]─[~] ╙[#]-[ 

Что я имею:

 ╓[coffee]─[Linux-Tower]─[2014-11-05, 23:41]─[~] ╙[$]-[sudo su [sudo] password for coffee: root@Linux-Tower:/home# 

Итак, как мне установить PS1 чтобы быть тем, что используется при запуске с правами root?

Не используйте sudo su . su бессмысленно, поскольку вы уже стали root, используя sudo .

sudo -Es этого используйте sudo -Es . Это сохранит среду. Однако есть улов. Поскольку оболочка запускается в интерактивном режиме, она отправляется в исходный ~/.bashrc , который предположительно перезагружает $PS1 . Однако $HOME сохранен, поэтому bash собирается использовать ваш домашний каталог при поиске .bashrc , а не в корневом доме. Таким образом, ваш профиль будет использоваться.

Однако у этого есть одна возможная проблема. Как уже упоминалось, $HOME устанавливается в дом вашего пользователя, поэтому любые команды, которые создают файлы в $HOME/ будут создавать их как root. Хотя это не имеет значения, если файлы уже существуют и просто перезаписаны.

Если вы действительно хотите сохранить $PS1 , вы можете сделать это, но это не так чисто:

 sudo -E bash --norc 

или

 sudo PS1="$PS1" bash --norc 

Основным недостатком этого является то, что этот метод явно использует bash в качестве оболочки, а --norc является параметром bash. Вышеупомянутый метод sudo -Es будет использовать любое значение, установленное для $SHELL , что имеет значение, если вы не используете bash .
Также при использовании метода -E вам необходимо убедиться, что $PS1 экспортирован.