Ok, então, em vez de codificar algumas variáveis de ambiente local que espelham um servidor remoto (servidor OpenShift), gostaria de fazer isso programaticamente, para que não tenhamos que manter tudo atualizado manualmente.
No momento, tenho isso codificado em um arquivo:
#!/usr/bin/env bash
export OPENSHIFT_MONGODB_DB_USERNAME="admin"
export OPENSHIFT_MONGODB_DB_PASSWORD="xyz"
export OPENSHIFT_MONGODB_DB_HOST="emsa-xyz-2-emsa.cloudapps.nabisco.com"
export OPENSHIFT_MONGODB_DB_PORT=60161
Em vez de codificar, posso recuperar as variáveis de ambiente "públicas" do OpenShift com este comando:
rhc env list -a <app-name>
que escreve isso para stdout:
NODE_ENV=jailbreak
NPM_CONFIG_PRODUCTION=true
OPENSHIFT_MONGODB_DB_HOST=emsa-xyz-2-emsa.cloudapps.nabisco.com
OPENSHIFT_MONGODB_DB_PASSWORD=xyz
OPENSHIFT_MONGODB_DB_PORT=60161
OPENSHIFT_MONGODB_DB_USERNAME=admin
alguém sabe como posso pegar esse stdout e, por sua vez, exportar cada uma dessas variáveis?
Eu suponho que seria assim - pegue cada linha e coloque export
na frente dela e depois execute bash -e "export x"
... o problema é que provavelmente roda em um subshell e não afetaria o shell atual?
A resposta existente a esta pergunta é boa e não deve ser perdida.
Se você confia na saída do seu comando rhc, basta obtê-lo:
Isso irá originar (executar) cada linha que
rhc
produz.Conforme escrito, o código acima define as variáveis, mas não as exporta. Poderíamos consertar isso, mas o código abaixo é mais seguro e faz a exportação.
O comando source,
.
, espera um arquivo como argumento. Para converter a saída derhc
em um objeto semelhante a um arquivo, usamos a substituição do processo :<(...)
.Para ser mais seguro, use:
Aqui, usamos substituição de processo,
<(...)
, combinada com redirecionamento de entrada,<
, para que owhile
loop leia a saída derhc
. O espaço entre o primeiro e o segundo<
é essencial: não o omita.A
-x
opçãodeclare
diz ao bash para exportar a variável.Mudando a ordem
Conforme comentário abaixo, o
rhc
comando pode ser colocado na linha acima dowhile
loop via:<<<
cria uma string aqui . Nesse caso, significa que o$tmpvar
é fornecido como entrada para owhile
loop.