Forma definitiva e imediata de exportar um caminho

3

Suponha que eu queira exportar um caminho, digamos, FOOBAR e faça as alterações não apenas efetivas imediatamente e em todos os lugares, mas também permanentes. Meu objetivo é ter uma lista de comandos que podem ser inseridos manualmente em uma sessão de shell ativa, bem como executados a partir de um script de shell (que por sua vez pode ser executado via shell ou gerenciador de arquivos da GUI, etc.). >

Processos antigos não precisam estar cientes de quaisquer alterações.

Veja o que quero que aconteça a FOOBAR :

  • Adicione um novo valor sem substituir os valores anteriores.
  • Torne a alteração acessível para todo o sistema (para qualquer programa ou sessão de shell, independentemente de como ela é iniciada) no contexto do usuário atual.
  • Torne a alteração efetiva imediatamente (ou seja, sem necessidade de logout, etc.)

Minha abordagem atual é exportar o valor como um comando set para .profile e .bashrc :

echo "export FOOBAR=$FOOBAR:$HOME/example/" >> $HOME/.profile;
echo "export FOOBAR=$FOOBAR:$HOME/example/" >> $HOME/.bashrc;
source $HOME/.profile;

Como isso pode ser melhorado em termos de:

  • Funciona, mas há casos em que isso irá falhar e como posso evitá-los (por exemplo, existem processos ou ações comuns que um usuário do Ubuntu fará, etc., que quebrarão meu caminho exportado)?
  • Há alguma preocupação de segurança com essa abordagem e como isso pode ser corrigido?
  • Existem outras colisões ou conseqüências negativas às quais devo prestar atenção para tornar isso o mais universal possível (dentro da família do Ubuntu)?
por mınxomaτ 17.03.2016 / 21:08

1 resposta

4
  • deve ser ~/.profile ou .bashrc . Não ambos, pois /.bashrc está carregado -from- ~/.profile .
  • Um shell de não-login só carregará ~/.bashrc e não /etc/profile , ~/.bash_profile , ~/.bash_login ou ~/.profile , portanto, se isso for uma preocupação, ~/.profile não será usado.
  • um não-login sem shell carregará o conjunto de configurações em $BASH_ENV . Não encontrei o que é carregado, mas ~/.bashrc deve ser um deles.

Em relação ao seu primeiro ponto:

  • Isso provavelmente não é uma boa ideia. E provavelmente não como funciona. Quando você recarregar as variáveis de ambiente, elas começarão a partir do vazio (supondo que você quis dizer que não deve esvaziar ao recarregá-las ;-)).

Em relação ao seu segundo ponto:

  • se você quiser, todos os usuários usam /etc/profile ou /etc/environment . / etc / environment é o local correto para variáveis de ambiente do sistema. E também: isso exclui ~/.profile .

Em relação ao seu terceiro ponto:

/etc/environment não requer reinicialização. Requer um novo login. E isso deve ser feito com um novo login; você pode obtê-lo novamente, mas isso só se aplica à sua sessão e ao que é iniciado depois que você a comprou. Não para processos já em execução.

No entanto

. /etc/environment

é um método para recarregar todas as variáveis. Mas novamente: isso não os redefine para processos atualmente em execução. Apenas para o shell atual e processos iniciados recentemente.

Em relação ao quarto, quinto e sexto ponto:

O único problema que posso ver é que pode correr solta. Se você adicioná-lo a ~/.bashrc e obter 10, 20 vezes sua variável será inundada com as mesmas partes.

E não e não. Não há riscos de segurança.

    
por Rinzwind 17.03.2016 / 21:54