Como eu mantenho o PS1 personalizado no modo de superusuário?

2

O problema é este:

Defino um PS1 personalizado no meu .bashrc, mas ele é alterado para o padrão quando entro no modo superusuário.

O que eu esperava:

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

O que eu tenho:

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

Então, como eu defino PS1 para também ser o que está sendo usado ao executar como root?

    
por Electric Coffee 05.11.2014 / 23:45

1 resposta

3

Não use sudo su . O su é inútil, pois você já se tornou root usando sudo .

Use sudo -Es . Isso preservará o meio ambiente. No entanto, há um porém. Como o shell está sendo lançado interativamente, ele irá fornecer ~/.bashrc , que presumivelmente redefinirá $PS1 . No entanto, $HOME é preservado, então o bash usará seu diretório inicial ao procurar .bashrc e não a raiz de sua origem. Assim seu perfil será usado.

Isso tem um problema possível. Como mencionado, $HOME está definido para a casa do usuário, portanto, qualquer comando que crie arquivos em $HOME/ os criará como raiz. Embora isso não importe se os arquivos já existem e são apenas sobrescritos.

Se você realmente deseja preservar $PS1 , pode fazê-lo, mas não é tão simples:

sudo -E bash --norc

ou

sudo PS1="$PS1" bash --norc

As principais desvantagens disso são que este método usa explicitamente bash como o shell, e --norc também é uma opção específica do bash. O método sudo -Es acima usará o que for que $SHELL esteja definido, o que importa se você não estiver usando bash .
Além disso, ao usar o método -E , você precisa garantir que $PS1 seja exportado.

    
por 06.11.2014 / 02:16