Cambio de comportamiento de bash prompt cuando funciona como root

16

Antes de hacer clic, esta no es la típica pregunta "¿cómo puedo hacer que mi indicador de bash tenga color"? Ya he personalizado mi mensaje bash para que se vea así:

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

donde todo entre paréntesis es azul claro, y todo lo demás (incluido $) es negro agregando lo siguiente a mi archivo ~ / .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

El objetivo es lograr que lo único que cambia cuando uso 'sudo su' es que el $ negro cambia a un # rojo. He buscado en /etc/bash.bashrc y / etc / profile para ver si solo hay una línea para comentar, pero hay un montón de cosas sobre debian_chroot que no entiendo, y no quiero arruinar algo ¿Cómo puedo lograr lo que quiero?

PD: así es como quiero que se vea el mensaje como root

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

editar: Marque esto resuelto, agregando el código anterior a ~ / .bashrc mientras que root logró mi objetivo. Además, en el código anterior, $ (pwd) solo muestra el directorio de inicio (supongo que es el directorio de trabajo cuando se abre el terminal), y nunca se actualiza. Reemplazar $ (pwd) con \ w corrige esto, pero muestra el directorio de inicio como ~, que estaba tratando de evitar.

zmitchell
fuente
¿Estás usando $ pwd o $ PWD?
belacqua
No podrá ajustar las líneas correctamente ya que no le dijo a bash que estaba usando caracteres no imprimibles. Incluya caracteres no imprimibles, como \e[01;31m, en \[...\]. Esto se explica en PROMPTING en el manual. También vea mywiki.wooledge.org/BashFAQ/053
geirha
La razón por la pwdque no funcionó en el indicador es que necesita escapar del signo de dólar, de lo contrario $(pwd)se ejecutará antes de que el contenido se coloque en $ PS1. Puede probar con esto: PS1="\$(pwd) ".
F-3000

Respuestas:

12

También dependerá de cómo se convierta en usuario root. Debe realizar el cambio en el .bashrc del usuario raíz si está utilizando algo como su - rooto sudo -i, donde lee en el entorno.

Con sudo -s, deberías estar leyendo tu propio .bashrc.

Considere agregar algunas declaraciones printf o echo para depurar su código, para decirle cuándo se ha ejecutado.

Usa el idcomando para asegurarte de que eres quien crees que eres:

root@tau:~# id
uid=0(root) gid=0(root) groups=0(root)
belacqua
fuente
Estoy usandosudo su
zmitchell
1
sudo sulee ~ root / .bashrc (al menos como se implementa actualmente en mi sistema 13.04).
belacqua 06/0613
3

Para cambiar el color del indicador a rojo para la raíz, modifiqué el .bashrcarchivo, siguiendo los ejemplos en este hilo.

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

Luego, en vim, busque la apariencia final de la PS1asignación y agregue esto a continuación (tenga en cuenta que actualiza el valor de $PS1para que no sea necesario modificar otras líneas anteriores, y el cambio es fácilmente reversible):

# Set RED prompt
PS1="\[\e[01;31m\]$PS1\[\e[00m\]"
CJBS
fuente
2

Siguiendo la respuesta válida de belacqua /ubuntu//a/305053/12218 , al emitir sudo su se carga el .bashrc de la raíz.

Puede verificar esto emitiendo sudo suseguido de cd ~que verá que está en el directorio de inicio de la raíz.

Al sudo suiniciar sesión como root (su = cambiar de usuario) al contrario que
sudo do some administrative taskcomo usuario con privilegios elevados.

Entonces, al usarlo, sudo suse convierte en la raíz real y los cambios realizados en el entorno son cambios realizados específicamente en la raíz, es decir: sudo suseguidos de vim .bashrc.

Stef K
fuente
0

Seguir puede ayudar

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

Esto se mostrará '> 'para usuarios normales y '# 'para root. Esto todavía necesita estar en la raíz .bashrctambién.

Petr Gladkikh
fuente