Como exportar variáveis configuradas de uma só vez?

set o comando exibe todas as variáveis locais como abaixo. Como exporto essas variáveis de uma vez?

>set a=123 b="asd asd" c="hello world" 

Comentários

  • o que quer dizer exportar tudo de uma vez? você pode usar ponto e vírgula para definir em uma linha … como a = 123; b = " asd asd "; c = " hello world "
  • Muito semelhante a unix.stackexchange .com / q / 79064/4667
  • set também exibe funções e variáveis do sistema como BASH_VERSION
  • Sua pergunta não está clara . É um trecho da set saída que você ' está mostrando? Em caso afirmativo, então ' não bash ' s. Você deseja exportar todas as variáveis atualmente definidas, incluindo as variáveis especiais do shell? Ou apenas essas três variáveis como em export a b c?
  • export ${!T*} exportariam qualquer parâmetro definido cujo nome comece com T. Infelizmente, não ' não parece ser uma maneira de gerar facilmente uma lista de todos os parâmetros definidos.

Resposta

Execute o seguinte comando, antes de definir as variáveis:

set -a 

man página:

-a
Quando esta opção está ativada, o atributo de exportação deve ser definido para cada variável para a qual uma atribuição é realizada;

Para desligar esta opção, execute set +a depois.

Exemplo:

set -a . ./environment set +a 

Onde environment contém:

FOO=BAR BAS="quote when using spaces" 

Comentários

  • No entanto, deve ser habilitado antes de atribuir as variáveis. Ele não ' não faz nada com as variáveis atribuídas anteriormente.
  • @chepner, Obrigado, esqueci de mencionar isso !!
  • Isso também automaticamente exporta funções da mesma maneira que function example(){ echo good; }; export -f example

Resposta

Isso funciona se o seu shell for bash (possivelmente outros shells também)

export > /my/env/var/file 

seu novo arquivo conterá um dump de todas as variáveis definidas atualmente … com entradas como

declare -x PORT="9000" declare -x PORT_ADMIN="3001" declare -x PORT_DOCKER_REGISTRY="5000" declare -x PORT_ENDUSER="3000" declare -x PRE_BUILD_DIR="/cryptdata6/var/log/tmp/khufu01/loud_deploy/curr/loud-build/hygge" declare -x PROJECT_ID="hygge" declare -x PROJECT_ID_BUSHIDO="bushido" 

em seguida, para aumentar o shell atual com todos os problemas env vars

source /my/env/var/file 

Resposta

`echo "export" $((set -o posix ; set)|awk -F "=" "BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}")` 
  1. Primeiro, obtenha todas as variáveis de ambiente definidas: (set -o posix ; set) Referência: https://superuser.com/questions/420295/how-do-i-see-a-list-of-all-currently-defined-environment-variables-in-a-linux-ba

  2. Obtenha todos os nomes de variáveis de ambiente, separados por espaço: awk -F "=" "BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}" Referência: awk-Printing column value e sem nova linha e adicionando vírgula e https://stackoverflow.com/questions/14212993/regular-expression-to-match-a-pattern-inside-awk-command

  3. Agora, precisamos exportar essas variáveis, mas xargs não pode fazer isso porque bifurca o processo filho, a exportação tem que ser executada no processo atual. echo "export" ... crie um comando que desejamos e, em seguida, use “ para executá-lo. Isso é tudo: p.

Comentários

  • Bem-vindo a U & L SE. Talvez você possa editar sua postagem e dar alguma explicação.
  • ' Não é correto assumir que os nomes das variáveis de ambiente consistirão apenas em az e AZ. Eles geralmente incluem sublinhados e dígitos também, então o padrão seria [a-zA-Z_][a-zA-Z0-9_]*. Existem algumas variações disso com base no shell que você ' está usando, mas esta é a abordagem segura / portátil.
  • Bom argumento @ChrisJohnson – atualizado!

Resposta

Você pode preceder export ao nome da variável por meio de awk e eval a saída resultante:

eval $(printenv | awk -F= "{ print "export " $1 }") 

Comentários

  • printenv imprime as variáveis que já foram exportadas. Isso também ' não funcionou prop erly se houver variáveis que contenham caracteres de nova linha.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *