Como definir variáveis ​​de ambiente persistentes para raiz?

40

Para criar variáveis ​​de ambiente persistentes, adiciono o arquivo de script ao diretório /etc/profile.d, por exemplo:

# meu script
exportar MY_VAR = var_value

Isso funciona corretamente para o usuário atual:

alex @ alex-64: ~ $ echo $ MY_VAR
var_value

Agora eu preciso das mesmas variáveis ​​de ambiente para o usuário root, mas o script /etc/profile.d não funciona para root:

alex @ alex-64: ~ $ echo $ MY_VAR
var_value
alex @ alex-64: ~ $ sudo su
root @ alex-64: / home / alex # echo $ MY_VAR

root @ alex-64: / home / alex # 

Como posso definir as mesmas variáveis ​​para a raiz?

Alex F
fonte
2
Esta pergunta sobre como preservar uma variável específica do ambiente do chamador durante a execução sudoestá muito relacionada. (Mas não é uma duplicata porque esta questão é sobre como personalizar de raiz próprio meio ambiente.)
Elias Kagan

Respostas:

44

O sudo normalmente não preserva variáveis ​​de ambiente local. Você deve usá-lo com a -Eopção de fazer isso, ou seja sudo -E su, preservará $ MYVAR como root.

Como alternativa, para criar variáveis ​​persistentes realmente abrangentes ao sistema, defina-as /etc/environment.

ish
fonte
14
Não funciona, / etc / variáveis environemnt não são definidas para sudo
Frederic Yesid Peña Sánchez
3
@ FredericYesidPeñaSánchez fez por mim no CentOS. Você não fazer script de lá, você acabou de fazer tarefas simples em cada linha, ou sejaFOO=bar
iamyojimbo
10

Como o processo que define sua própria variável de ambiente, por exemplo, editando '~ / .bashrc', você pode definir a variável de ambiente raiz editando '/root/.bashrc'.

ppppplv
fonte
8

Defaults env_resetin /etc/sudoersredefinirá a raiz PATHdefinida por /etc/environment.

Você pode modificá-lo Defaults !env_resetpara desativar a redefinição ou adicionar:

Defaults secure_path="my/custom/path:/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin
diyism
fonte
Se eu quiser usar a segunda solução (significa adicionar caminho ao secure_path), qual é a chave ?! caminho é apenas valor. Quero adicionar ANDROID_NDK a variáveis ​​de ambiente para raiz. Então, por enquanto, eu apenas estou usando o primeiro (! Env_reset) .Obrigado.
Dr.jacky