Importando variáveis de ambiente de outro script para o shell atual

1

Eu tenho um script de shell que define algumas variáveis de ambiente que eu executo através do comando source para afetar o shell atual. Eu criei outro script de shell que se refere a esse script de shell e pensei em chamar source dentro desse outro script de shell teria o mesmo efeito que chamar diretamente no shell atual, mas aparentemente esse não é o caso. Existe alguma maneira de dizer a este script invocador que tudo o que se aplica ao shell em execução deve ser refletido para o shell atual?

O script com as variáveis de ambiente começa com set -a , então pensei em fazer algo como

$(cat env_script.sh)

exportaria tudo para o shell invocador, mas isso também não parece funcionar.

    
por Psycho Punch 18.09.2018 / 15:56

2 respostas

1

Sua abordagem não funciona por dois motivos.

Primeiro, vamos supor que seu env_script.sh contenha uma instrução para definir uma variável, por exemplo

X=5

Se você executar a declaração

$(cat env_script.sh)

você está pedindo bash para executar o conteúdo deste script como comandos, ou seja, para executar um programa com o nome engraçado X=5 .

Assim, a maneira correta de trazer as definições para o seu shell seria

. env_script.sh

O segundo problema é que, de acordo com a sua escrita, você quer propagar a variável para o "script invocador". Agora não está totalmente claro o que exatamente você quer dizer com "invoker script", mas se este script invoker não for sourcing o script que você está prestes a escrever, mas invocando-o como um processo filho, existe tecnicamente não há como passar as variáveis diretamente para o invocador.

Em resumo, se um shell precisar que variáveis sejam configuradas e as configurações definidas em um arquivo separado, ele precisará de um comando source para importá-las.

    
por 19.09.2018 / 08:47
0

Aqui um exemplo

#!/bin/bash

CURR_DIR=$(dirname $(readlink -f $0))
. ${CURR_DIR}/set-env-script.sh

# Add here your code...
    
por 18.09.2018 / 16:14