Alterando o comportamento do prompt do bash ao funcionar como root

16

Antes de clicar fora, essa não é a pergunta típica "como faço para que meu prompt do bash tenha cor". Eu já personalizei meu prompt do bash para ficar assim:

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

onde tudo entre parênteses é azul claro e todo o resto (incluindo $) é preto adicionando o seguinte ao meu arquivo ~ / .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

O objetivo é torná-lo tal que a única coisa que muda quando uso 'sudo su' é que o $ preto mude para um # vermelho. Procurei em /etc/bash.bashrc e / etc / profile para ver se há apenas uma linha para comentar, mas há um monte de coisas sobre debian_chroot que eu não entendo e não quero estragar alguma coisa. Como posso realizar o que quero?

PS É assim que eu quero que o prompt pareça como root

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

edit: Marque isso resolvido, acrescentando o código acima a ~ / .bashrc enquanto o root cumpria meu objetivo. Além disso, no código acima, $ (pwd) exibe apenas o diretório inicial (acho que porque esse é o diretório de trabalho quando o terminal é aberto) e nunca é atualizado. Substituir $ (pwd) por \ w corrige isso, mas exibe o diretório inicial como ~, o que eu estava tentando evitar.

zmitchell
fonte
Você está usando $ pwd ou $ PWD?
Belacqua
Falha ao quebrar as linhas corretamente, pois você não disse ao bash que estava usando caracteres não imprimíveis. Coloque caracteres não imprimíveis, como \e[01;31m, em \[...\]. Isso é explicado em PROMPTING no manual. Veja também mywiki.wooledge.org/BashFAQ/053
geirha
A razão pela qual pwdnão funcionou no prompt é que você precisa escapar do cifrão, caso contrário, $(pwd)será executado antes do conteúdo ser colocado em $ PS1. Você pode testá-lo com esta: PS1="\$(pwd) ".
F-3000

Respostas:

12

Também dependerá de como você se torna o usuário root. Você precisa fazer a alteração no .bashrc do usuário raiz se estiver usando algo como su - rootou sudo -i, onde você lê no ambiente.

Com sudo -s, você deve ler seu próprio .bashrc.

Considere adicionar algumas instruções printf ou echo para depurar seu código, para informar quando ele foi executado.

Use o idcomando para garantir que você é quem você pensa que é:

root@tau:~# id
uid=0(root) gid=0(root) groups=0(root)
belacqua
fonte
Eu estou usandosudo su
zmitchell
1
sudo sulê ~ root / .bashrc (pelo menos como atualmente implementado no meu sistema 13.04).
Belacqua
3

Para alterar a cor do prompt para vermelho como raiz, modifiquei o .bashrcarquivo, seguindo os exemplos neste segmento.

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

Em seguida, no vim, procure a aparência final da PS1atribuição e adicione-a a seguir (observe que ele atualiza o valor de $PS1modo que outras linhas anteriores não precisem ser modificadas e a alteração seja facilmente revertível):

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

Após a resposta válida do belacqua /ubuntu//a/305053/12218 , emitindo sudo su, o .bashrc da raiz é carregado.

Você pode verificar isso emitindo sudo suseguido de cd ~você verá que está no diretório inicial do root.

Usando sudo suo login como root (su = alternar usuário), ao contrário de
sudo do some administrative taskcomo usuário com privilégios elevados.

Então, usando sudo su você se torna a raiz real e as alterações feitas no ambiente são feitas especificamente na raiz, ou seja: sudo suseguidas por vim .bashrc.

Stef K
fonte
0

A seguir pode ajudar

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

Isso será exibido '> 'para o usuário normal e '# 'para o root. Isso ainda precisa estar na raiz .bashrctambém.

Petr Gladkikh
fonte