Estou usando o aws cfn para iniciar instâncias do Ubuntu e preciso passar variáveis fornecidas no script de inicialização do 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 desejam saber esse endereço.
No momento eu crio um arquivo em /etc/profile.d configurando vars com export
, mas isso só funciona se o bash for iniciado como um shell de login, o que requer ações extras de minha parte para ter essas variáveis em todos os lugares.
Então pensei que talvez pudesse criar arquivos em /usr/local/bin, por exemplo, get-db-host.sh
com echo "db-2.domain.com"
conteúdo, dessa forma eles estariam disponíveis para cada script sem necessidade de alterações.
É uma boa abordagem?
Responder1
É uma boa abordagem?
Tenho certeza de que todos os scripts dos quais você está falando são scripts de shell. Neste caso, você poderia simplesmente colocar todas as suas 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 em outros scripts:
. /usr/local/etc/myapp
Você também pode usar simplesmente /etc
, obviamente.
Responder2
O método recomendado é apenas adicionar as variáveis ao arquivo /etc/environment
. Este arquivo é lido no login (doDocumentos do Ubuntu):
As configurações de variáveis de ambiente que afetam o sistema como um todo (em vez de apenas um usuário específico) não devem ser colocadas em nenhum dos muitos scripts de nível de sistema que são executados quando o sistema ou a sessão da área de trabalho são carregados, mas em
/etc/environment - Este arquivo destina-se especificamente a configurações de variáveis de ambiente em todo o sistema. Não é um arquivo de script, mas consiste em expressões de atribuição, uma por linha. Especificamente, este arquivo armazena as configurações de localidade e caminho de todo o sistema.
Então, basta editar /etc/environment/
e adicionar
db-server=db-2.domain.com
Responder3
Eu diria não a essa ideia. Esse diretório /usr/local/bin
destina-se a executáveis locais da caixa e que não fazem parte de nenhum pacote específico (geralmente).
Em vez de fazer alguma configuração misteriosa que você está fazendo, coloque as variáveis onde elas seriam claramente óbvias para outra pessoa que possa precisar executar sua tarefa.
Eu os colocaria em um arquivo no seu $HOME
diretório e simplesmente obteria esse arquivo do seu arquivo $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