Bash: Mudar de usuário para root causa problemas com o prompt

0

Estou em um Mac, executando o Snow Leopard (se for importante). Eu estou personalizando meu prompt bash para exibir as coisas que são extraídas de lugares específicos do usuário. Por exemplo, estou usando o Ruby Version Manager para gerenciar diferentes versões do Ruby. Estou exibindo a versão em Ruby que estou usando no prompt. Eu também estou usando o Homebrew , e instalei o Git via Homebrew. Eu estou exibindo o ramo Git no prompt também.

O problema é quando eu mudo para o root (sudo su, ou sudo bash) ele tenta usar o prompt do meu usuário, que ele não poderá usar porque não será capaz de encontrar o RVM ou o Homebrew. Por isso, exibe erros. Como posso corrigir isso para que ele não exiba erros? (seja colocando o RVM / Homebrew como se eu ainda fosse esse usuário ou não exibindo meu prompt personalizado)

    
por Andrew 12.10.2011 / 17:49

5 respostas

1

Opção 1

Use sudo su - em vez de apenas sudo su

O traço extra é um sinônimo para -l , que simula um login completo. Isso significa que ele lerá arquivos de configuração (.bashrc, .profile, etc) do diretório inicial do usuário root.

Opção 2

Se você insistir em usar seu próprio .bashrc, coloque um teste para verificar a existência do RVM no caminho antes de tentar colocá-lo no caminho. Algo parecido com isto:

type rvm > /dev/null
RVM_EXISTS=$?  # get exit status, 0 if it exists
if [ $RVM_EXISTS ] 
then
    PS1=(your rvm code here)
else
    PS1=(your prompt w/o rvm here)
fi

(não testado)

Opção 3

Teste a existência de rvm como na opção 2, mas crie uma função bash dumm rvm se ela não existir e não altere PS1

type rvm > /dev/null
RVM_EXISTS=$?  # get exit status, 0 if it exists
if [ ! $RVM_EXISTS ] 
then
   rvm () { echo > /dev/null }
fi
    
por 12.10.2011 / 20:55
0

Você precisa alterar seu prompt manipulando a variável do sistema $ PS1

Se você quisesse exibir seu nome de host seguido por um cifrão, você poderia fazer o seguinte: export PS1='h:\W\$'

Para manter suas configurações para o próximo shell Bash, coloque uma linha em seu $ HOME / .bashrc que se parece com isso: PS1='\h:\W\$'

Usuários de Mac anotam o seguinte Devido ao modo como o OS X e a emulação de comandos do aplicativo Terminal manipulam o arquivo $ HOME / .bash_profile e insira a seguinte linha: fonte ~ / .bashrc

Fonte

    
por 12.10.2011 / 19:12
0

Você pode configurar tudo no diretório pessoal da raiz para que ele use um .bashrc diferente, ou o mesmo (apenas mv)

    
por 12.10.2011 / 19:44
0

Não tenho certeza, mas acredito que executar sudo -s iniciará o shell de raiz com todas as variáveis de ambiente ainda em vigor.

    
por 12.10.2011 / 19:59
0

Não me deixará votar, mas Doug Harris tem a resposta correta: "Use sudo su - em vez de apenas sudo su"

Essa é de longe a maneira mais fácil de fazer isso. E funciona quando vai sudo em qualquer usuário para assumir seu ambiente de login. Eu pessoalmente não iria mexer com o ambiente de login do root e usaria "sudo su -" no lugar.

    
por 12.10.2011 / 21:14