sudo não preservando PS1

1

A configuração abaixo está no meu /etc/sudoers :

Defaults    !visiblepw
Defaults    always_set_home
Defaults    env_reset
Defaults    env_keep =  "COLORS EDITOR DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS"
Defaults    env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults    env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
Defaults    env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
Defaults    env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

Quando eu sudo su my PS1 terminal muda para o padrão do sistema; ignorando minha configuração .bashrc PS1 . Como posso corrigir isso para que as variáveis de ambiente não sejam perdidas quando sudo su ing?

Estranho; ele está exportando EDITOR , mas não está exportando PS1 por algum motivo; é como se estivesse sendo forçado a ser substituído; como posso parar isso?

Quando executo sudo -V , as variáveis para manter PS1 são listadas; não está listado nas variáveis a serem removidas.

    
por user1529891 30.05.2014 / 19:33

4 respostas

5

Não use sudo su . É um abuso / uso inútil de su . O equivalente correto é sudo -s .

Se você deseja preservar as variáveis de ambiente, você deseja sudo -Es .

Se você achar que $PS1 ainda está mudando, provavelmente você tem um script fazendo isso. Você pode descobrir onde fazendo sudo -Es $SHELL -x e lendo a saída.

    
por 30.05.2014 / 19:47
5

Um ou dois anos atrás, os autores e mantenedores de pacotes dos shells do sistema Unix concordaram que geralmente é melhor não export PS1 (devido às grandes diferenças de sintaxe entre os vários shells combinados com certas Comportamento "explosivo" de algumas conchas quando fornecido com as instruções de outras conchas. Todos concordamos em mover PS1 de inicialização para os arquivos de inicialização do shell interativo, ou seja, ~/.mkshrc , ~/.kshrc , ~/.bashrc etc.

Disclaimer: Eu sou o desenvolvedor do mksh.

    
por 31.05.2014 / 00:43
1

PS1 provavelmente foi inicializado na inicialização do shell. Ou seja o valor é de fato preservado por sudo , mas depois sobrescrito pelo shell.

    
por 30.05.2014 / 19:56
1

Geralmente, você pode definir explicitamente o arquivo de origem $ENV para um shell na invocação. Por exemplo, você pode ter alguma sorte com o seguinte:

sudo ENV=/home/$USER/.bashrc su

Caso contrário, você também pode tentar algo como:

sudo su -c "exec </dev/tty ENV="~/.bashrc" bash -i"
    
por 31.05.2014 / 09:43

Tags