Изменение поведения приглашения bash при работе от имени пользователя root

16

Перед тем, как щелкнуть мышью, это не типичный вопрос «как сделать так, чтобы моя подсказка bash имела цвет». Я уже настроил мой bash, чтобы он выглядел так:

[user @ host]----[$(pwd)]
$ 

где все в скобках светло-синий, а все остальное (включая $) черное, добавив следующее в мой файл ~ / .bashrc

# Turn the prompt symbol red if the user is root
if [ $(id -u) -eq 0 ];
then # you are root, make the prompt red
    PS1="[\e[01;34m\u @ \h\e[00m]----[\e[01;34m$(pwd)\e[00m]\n\e[01;31m#\e[00m "
else
    PS1="[\e[01;34m\u @ \h\e[00m]----[\e[01;34m$(pwd)\e[00m]\n$ "
fi

Цель состоит в том, чтобы сделать так, чтобы при использовании «sudo su» менялось только то, что черный $ превращается в красный #. Я заглянул в /etc/bash.bashrc и / etc / profile, чтобы увидеть, есть ли строка для комментария, но есть кое-что о debian_chroot, которое я не понимаю и не хочу что-то напортачить. Как я могу выполнить то, что я хочу?

PS Это то, что я хочу, чтобы приглашение выглядело как root

[user @ host]----[$(pwd)]
(red)#

edit: пометьте это как исправленное, добавив приведенный выше код в ~ / .bashrc, пока root достиг моей цели. Кроме того, в приведенном выше коде $ (pwd) отображает только домашний каталог (я полагаю, потому что это рабочий каталог при открытии терминала) и никогда не обновляется. Замена $ (pwd) на \ w исправляет это, но отображает домашний каталог как ~, чего я пытался избежать.

zmitchell
источник
Вы используете $ pwd или $ PWD?
Белаква
Он не сможет правильно переносить строки, поскольку вы не сказали bash, что используете непечатаемые символы. Вложите непечатаемые символы, например \e[01;31m, в \[...\]. Это объясняется в разделе «ПРЕДУПРЕЖДЕНИЕ» в руководстве. Также см. Mywiki.wooledge.org/BashFAQ/053
гейра
Причина, по которой pwdне сработало приглашение, заключается в том, что вам нужно экранировать знак доллара, иначе $(pwd)он будет выполнен до того, как содержимое будет помещено в $ PS1. Вы можете проверить это с этим: PS1="\$(pwd) ".
F-3000

Ответы:

12

Это также будет зависеть от того, как вы станете пользователем root. Вам нужно внести изменения в .bashrc пользователя root, если вы используете что-то вроде su - rootили sudo -i, где вы читаете в среде.

С sudo -s, вы должны читать свой собственный .bashrc.

Попробуйте добавить несколько операторов printf или echo для отладки вашего кода, чтобы сообщить, когда он был выполнен.

Используйте idкоманду, чтобы убедиться, что вы тот, кем себя считаете:

root@tau:~# id
uid=0(root) gid=0(root) groups=0(root)
belacqua
источник
Я используюsudo su
zmitchell
1
sudo suчитает ~ root / .bashrc (по крайней мере, как в настоящее время реализовано в моей системе 13.04).
belacqua
3

Чтобы изменить цвет приглашения на красный для root, я изменил .bashrcфайл, следуя примерам в этой теме.

regularuser@myubuntubox:~$ sudo su - 
root@myubuntubox:~# vim .bashrc

Затем в vim найдите окончательный вид PS1присвоения и добавьте следующее после него (обратите внимание, что оно обновляет значение $PS1так, что другие предыдущие строки не нужно изменять, и изменение легко обратимо):

# Set RED prompt
PS1="\[\e[01;31m\]$PS1\[\e[00m\]"
CJBS
источник
2

После правильного ответа belacqua /ubuntu//a/305053/12218 путем выдачи sudo su загружается root .bashrc.

Вы можете проверить это, выполнив команду, sudo suпосле чего cd ~вы увидите, что находитесь в домашнем каталоге root.

Если sudo suвы входите в систему как root (su = switch user), а не
sudo do some administrative taskкак пользователь с повышенными привилегиями.

Таким образом, используя sudo suвас, вы становитесь настоящим пользователем root, а изменения, внесенные в среду, - это изменения, сделанные специально для root, то есть: с sudo suпоследующим vim .bashrc.

Стеф К
источник
0

Может помочь следующее

export PS1='`[ $(id -u) == "0" ] && echo "#" || echo ">"` '

Это покажет '> 'для обычного пользователя и '# 'для пользователя root. Это все еще должно быть в корне .bashrcтоже.

Петр Гладких
источник