Como definir permanentemente variáveis ​​ambientais

227

Minhas variáveis ​​são

LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
ORACLE_HOME=/usr/lib/oracle/11.2/client64

Como salvar essas variáveis ​​permanentemente?

user3021349
fonte
2
As outras respostas nesta página são ótimas. Uma pequena recomendação seria adicionar /usr/lib/oracle/11.2/client64/libum novo arquivo no /etc/ld.so.conf.d/caminho. Então você não precisa definir LD_LIBRARY_PATH, veja também aqui .
Elliott Frisch
1
Cuidado, há mais nessa história do que parece inicialmente. Convido você a verificar minha resposta.
Jasonleonhard

Respostas:

252

Você pode adicioná-lo ao arquivo .profileou ao arquivo de perfil do shell de login (localizado no diretório inicial).

Para alterar a variável ambiental "permanentemente", é necessário considerar pelo menos estas situações:

  1. Shell de logon / não logon
  2. Shell interativo / não interativo

bater

  1. Bash como shell de login irá carregar /etc/profile, ~/.bash_profile, ~/.bash_login, ~/.profilena ordem
  2. O Bash como o shell interativo sem login será carregado ~/.bashrc
  3. Bash como shell não interativo sem login carregará a configuração especificada na variável de ambiente $BASH_ENV
$EDITOR ~/.profile
#add lines at the bottom of the file:  
     export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
     export ORACLE_HOME=/usr/lib/oracle/11.2/client64

zsh

$EDITOR ~/.zprofile
#add lines at the bottom of the file:  
     export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
     export ORACLE_HOME=/usr/lib/oracle/11.2/client64

ksh

$EDITOR ~/.profile
#add lines at the bottom of the file:  
     export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
     export ORACLE_HOME=/usr/lib/oracle/11.2/client64

Bourne

$EDITOR ~/.profile
#add lines at the bottom of the file:  
     LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib     
     ORACLE_HOME=/usr/lib/oracle/11.2/client64
     export LD_LIBRARY_PATH ORACLE_HOME

csh ou tcsh

$EDITOR ~/.login
#add lines at the bottom of the file:  
     setenv LD_LIBRARY_PATH /usr/lib/oracle/11.2/client64/lib
     setenv ORACLE_HOME /usr/lib/oracle/11.2/client64

Se você quiser torná-lo permanente para todos os usuários, poderá editar os arquivos correspondentes em /etc/, por exemplo , /etc/profilepara shells semelhantes a Bourne, /etc/csh.loginpara (t) csh e /etc/zsh/zprofilee /etc/zsh/zshrcpara zsh.

Outra opção é usar /etc/environment, que nos sistemas Linux é lida pelo módulo PAM pam_enve suporta apenas atribuições simples, não expansões no estilo de shell. (Veja o guia do Debian sobre isso.)

É provável que esses arquivos já contenham algumas atribuições; portanto, siga a sintaxe que você já vê presente no seu arquivo.

Certifique-se de reiniciar o shell e conectar novamente o usuário, para aplicar as alterações.

Se você precisar adicionar uma variável de ambiente para todo o sistema, agora existe uma /etc/profile.dpasta que contém o script sh para inicializar a variável.
Você pode colocar seu script sh com todas as variáveis ​​exportadas aqui.
Tenha cuidado, embora isso não deva ser usado como uma maneira padrão de adicionar variáveis ​​ao env no Debian.

Kiwy
fonte
Isto .profiledentro, /etc/mas eu não como definir as variáveis ​​neste, .profilepor favor me diga
user3021349
6
.profileestá no seu diretório pessoal não/etc/
Kiwy 28/02
1
[Admin@localhost etc]$ cat ~/.profile cat: /home/Admin/.profile: No such file or directory [Admin@localhost etc]$
user3021349
4
@ user3021349 Eu não quis ser rude, mas se você acha que um segundo também pode usar um editor diferente que domina. :wqé o comando para gravar o arquivo e saia em vi não se esqueça de digitar escantes
kiwy
3
Você precisará considerar as variáveis ​​de ambiente nos crontabscripts. Nenhum desses locais será procurado quando um crontabscript estiver em execução.
precisa saber é
71

Para fazer isso para todos os usuários / conchas, dependendo da distribuição que você possa usar /etc/environmentou /etc/profile. Criar um novo arquivo /etc/profile.dpode ser preferível, se existir, pois será menos provável que entre em conflito com as atualizações feitas pelo sistema de empacotamento.

Em /etc/environment, as variáveis ​​são geralmente definidas com name=value, por exemplo:

ORACLE_HOME=/usr/lib/oracle/11.2/client64

Em /etc/profile, você deve usar, exportpois este é um script, por exemplo:

export ORACLE_HOME=/usr/lib/oracle/11.2/client64

O mesmo vale para um arquivo /etc/profile.d, também pode haver restrições de nomes que devem ser atendidas para que o arquivo funcione. No Debian, o arquivo deve ter a extensão .sh(embora não precise de uma linha de reta ou permissões executáveis, pois é originário). verifique a documentação da sua distribuição ou consulte o /etc/profilescript para ver como esses arquivos são carregados.

Observe também que essa configuração LD_LIBRARY_PATHpermanentemente é potencialmente problemática , incluindo um risco à segurança. Como alternativa, eu sugeriria encontrar uma maneira de acrescentar LD_LIBRARY_PATHo início da linha de comando para cada programa que precisa dele antes da execução. Por exemplo:

LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib myprog

Uma maneira de fazer isso é usar um script de wrapper para executar o programa. Você pode atribuir a ele o mesmo nome que o seu programa e colocá-lo em /usr/local/binqualquer lugar que aparecer antes da localização do seu programa PATH. Aqui está um exemplo de script (não esqueça chmod +xdo script):

#!/bin/sh
LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib /real/location/of/myprog "$@"
Graeme
fonte
então, se eu adicionei pares de valor ao meu environmentarquivo, o que faz com que eles sejam carregados? Por exemplo, depois de sair do editor vi (alterações escrito com sucesso), estou esperando para escrever echo $MY_NEW_VARIABLEe vê-lo imprimir - EDIT: Eu vejo que eles estão lá se eu lançar um novo shell de comando
bkwdesign
Não tenho certeza se isso é um problema pessoal ou o quê, mas tive que reiniciar meu sistema operacional depois de configurá-lo /etc/environment, mesmo se eu reiniciei o terminal bash ou digitei source /etc/environment. Portanto, se você estiver tendo problemas em que a variável de ambiente não está se perpetuando, tente reiniciar.
precisa saber é o seguinte
@bkwdesign @ Blairg23, /etc/environmentnão é um script, portanto não pode ser originado. Ele é carregado no momento do login (e em vários outros eventos do sistema) pelo PAM, para que você possa fazer logout / login ou executar uma nova sessão de login em um terminal, $ su <your username here>para selecionar os novos valores nessa sessão isolada. Os valores desaparecerão assim que você sair, por isso provavelmente é menos propenso a erros fazer logoff / login totalmente completos.
AaronDanielson
2

Quando você instala o oracle, o oracle solicita que você execute alguns scripts antes de clicar em ok. Esse script colocou uma configuração fictícia no .bash_profilediretório inicial do usuário in oracle. Para ver o arquivo, ls -almostrará todos os arquivos ocultos.

Digite nano bash_profilepara abrir o arquivo. Faça alterações no arquivo para refletir seu nome de host e o nome sid apropriado. verifique outras configurações que precisem de modificação. pressione o controle x para salvar e digite y quando for perguntado se deseja salvar. Pressione a tecla Enter para salvar. Reinicie o computador. Registrando como usuário Oracle. inicie o banco de dados digitando

sqlplus / as sysdba

startup  
Frankfurt
fonte
Como isso difere da resposta aceita ?
roaima 3/09/15