É uma boa idéia colocar variáveis de ambiente em / usr / local / bin

2

Estou usando o aws cfn para iniciar instâncias do ubuntu, e preciso passar variáveis fornecidas no script de inicialização cfn para os scripts na instância. Por exemplo, posso passar "db-server = db-2.domain.com" e há vários scripts na instância que querem saber esse endereço.

No momento, crio um arquivo em /etc/profile.d setting vars com export , mas isso só funciona se o bash for iniciado como um shell de login, o que requer ações extras da minha parte para ter essas variáveis em todos os lugares.

Então pensei que talvez eu pudesse criar arquivos em / usr / local / bin, por exemplo get-db-host.sh com echo "db-2.domain.com" como conteúdo, dessa forma eles estariam disponíveis para cada script sem alterações necessárias.

É uma boa abordagem?

    
por Fluffy 03.10.2013 / 15:04

3 respostas

2

Is it a good approach?

Tenho certeza de que todos os scripts sobre os quais você está falando são scripts de shell. Nesse caso, você poderia simplesmente colocar todas as variáveis em um arquivo de configuração:

db-server=db-2.domain.com

Coloque isso em um local padrão (por exemplo, /usr/local/etc/myapp/ ) e coloque-o nos outros scripts:

. /usr/local/etc/myapp

Você também pode usar apenas /etc , obviamente.

    
por 03.10.2013 / 16:32
1

O método recomendado é apenas adicionar as variáveis a /etc/environment . Este arquivo é lido no login (a partir do docs do Ubuntu ):

Environment variable settings that affect the system as a whole (rather than just a particular user) should not be placed in any of the many system-level scripts that get executed when the system or the desktop session are loaded, but into

/etc/environment - This file is specifically meant for system-wide environment variable settings. It is not a script file, but rather consists of assignment expressions, one per line. Specifically, this file stores the system-wide locale and path settings.

Então, basta editar /etc/environment/ e adicionar

db-server=db-2.domain.com
    
por 03.10.2013 / 16:33
0

Eu diria que não a essa ideia. Esse diretório /usr/local/bin é destinado a executáveis que são locais para a caixa e não fazem parte de nenhum pacote específico (geralmente).

Em vez de criar uma configuração misteriosa, coloque as variáveis onde ficariam óbvias para alguém que possa precisar executar sua tarefa.

Eu os colocaria em um arquivo no diretório $HOME e simplesmente usaria esse arquivo em $HOME/.bashrc .

Exemplo

if [ -f $HOME/.my_aws_env ]; then
    . $HOME/.my_aws_env
fi

Ou você pode ser legal e descolado e fazer isso em uma linha:

[ -f $HOME/.my_aws_env ] && . $HOME/.my_aws_env
    
por 03.10.2013 / 16:33