AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 406430
Accepted
Alexander Mills
Alexander Mills
Asked: 2017-11-23 16:04:00 +0800 CST2017-11-23 16:04:00 +0800 CST 2017-11-23 16:04:00 +0800 CST

exportar variáveis ​​​​env programaticamente, via stdout do comando [duplicado]

  • 772
Essa pergunta já tem resposta aqui :
Como definir várias variáveis ​​​​env do tubo stdout [duplicado] (1 resposta)
Fechado há 4 anos .

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 exportna 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.

bash shell-script
  • 1 1 respostas
  • 760 Views

1 respostas

  • Voted
  1. Best Answer
    John1024
    2017-11-23T16:28:35+08:002017-11-23T16:28:35+08:00

    Se você confia na saída do seu comando rhc, basta obtê-lo:

    . <(rhc env list -a <app-name>)
    

    Isso irá originar (executar) cada linha que rhcproduz.

    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 de rhcem um objeto semelhante a um arquivo, usamos a substituição do processo : <(...).

    Para ser mais seguro, use:

    while read -r line; do declare -x "$line"; done < <(rhc env list -a <app-name>)
    

    Aqui, usamos substituição de processo, <(...), combinada com redirecionamento de entrada, <, para que o whileloop leia a saída de rhc. O espaço entre o primeiro e o segundo <é essencial: não o omita.

    A -xopção declarediz ao bash para exportar a variável.

    Mudando a ordem

    Conforme comentário abaixo, o rhccomando pode ser colocado na linha acima do whileloop via:

    tmpvar=$(rhc env list -a <app-name>)
    while read -r line; do declare -x "$line"; done <<<"$tmpvar"
    

    <<<cria uma string aqui . Nesse caso, significa que o $tmpvaré fornecido como entrada para o whileloop.

    • 2

relate perguntas

  • Problema estranho ao passar variáveis ​​do arquivo de texto

  • Enquanto a linha lê mantendo os espaços de escape?

  • MySQL Select com função IN () com array bash

  • ordem de substituição de processos `te` e `bash`

  • Execute um script muito lento até que seja bem-sucedido

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Matriz JSON para bash variáveis ​​usando jq

    • 4 respostas
  • Marko Smith

    A data pode formatar a hora atual para o fuso horário GMT? [duplicado]

    • 2 respostas
  • Marko Smith

    bash + lê variáveis ​​e valores do arquivo pelo script bash

    • 4 respostas
  • Marko Smith

    Como posso copiar um diretório e renomeá-lo no mesmo comando?

    • 4 respostas
  • Marko Smith

    conexão ssh. Conexão X11 rejeitada devido a autenticação incorreta

    • 3 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Marko Smith

    comando systemctl não funciona no RHEL 6

    • 3 respostas
  • Marko Smith

    rsync porta 22 e 873 uso

    • 2 respostas
  • Marko Smith

    snap /dev/loop em 100% de utilização -- sem espaço livre

    • 1 respostas
  • Marko Smith

    chave de impressão jq e valor para todos no subobjeto

    • 2 respostas
  • Martin Hope
    EHerman Matriz JSON para bash variáveis ​​usando jq 2017-12-31 14:50:58 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Drux A data pode formatar a hora atual para o fuso horário GMT? [duplicado] 2017-12-26 11:35:07 +0800 CST
  • Martin Hope
    AllisonC Como posso copiar um diretório e renomeá-lo no mesmo comando? 2017-12-22 05:28:06 +0800 CST
  • Martin Hope
    Steve Como as permissões de arquivo funcionam para o usuário "root"? 2017-12-22 02:46:01 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST
  • Martin Hope
    Cbhihe Altere o editor padrão para vim para _ sudo systemctl edit [unit-file] _ 2017-12-03 10:11:38 +0800 CST
  • Martin Hope
    showkey Como baixar o pacote não instalá-lo com o comando apt-get? 2017-12-03 02:15:02 +0800 CST
  • Martin Hope
    youxiao Por que os diretórios /home, /usr, /var, etc. têm o mesmo número de inode (2)? 2017-12-02 05:33:41 +0800 CST
  • Martin Hope
    user223600 gpg — o comando list-keys gera uid [ desconhecido ] depois de importar a chave privada para uma instalação limpa 2017-11-26 18:26:02 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve