setting Posso exportar uma variável para o ambiente a partir de um script bash sem precisar obtê-la?



linux export variable example (6)

suponha que eu tenha esse script

export.bash :

#! /usr/bin/env bash
export VAR="HELLO, VARIABLE"

quando eu executo o script, e tento acessar o $VAR eu não recebo nenhum valor!

echo $VAR

Existe alguma maneira de acessar o $VAR apenas executando o export.bash sem obtê- lo?


Answer #1

Encontrou uma maneira interessante e organizada de exportar variáveis ​​de ambiente de um arquivo:

em env.vars :

foo=test

script de teste:

eval `cat env.vars`
echo $foo         # => test
sh -c 'echo $foo' # => 

export eval `cat env.vars`
echo $foo         # => test
sh -c 'echo $foo' # => test

# a better one
export `cat env.vars`
echo $foo         # => test
sh -c 'echo $foo' # => test

Answer #2

Existe alguma maneira de acessar o $VAR apenas executando o export.bash sem export.bash lo?

Resposta rápida: não.

Mas há várias soluções possíveis.

O mais óbvio, que você já mencionou, é usar source ou . para executar o script no contexto do shell de chamada:

$ cat set-vars1.sh 
export FOO=BAR
$ . set-vars1.sh 
$ echo $FOO
BAR

Outra maneira é ter o script, em vez de definir uma variável de ambiente, imprimir comandos que definirão a variável de ambiente:

$ cat set-vars2.sh
#!/bin/bash
echo export FOO=BAR
$ eval "$(./set-vars2.sh)"
$ echo "$FOO"
BAR

Uma terceira abordagem é ter um script que define sua (s) variável (s) de ambiente internamente e, em seguida, invoca um comando especificado com esse ambiente:

$ cat set-vars3.sh
#!/bin/bash
export FOO=BAR
exec "[email protected]"
$ ./set-vars3.sh printenv | grep FOO
FOO=BAR

Essa última abordagem pode ser bastante útil, embora seja inconveniente para uso interativo, pois não fornece as configurações do seu shell atual (com todas as outras configurações e histórico que você criou).


Answer #3

Talvez você possa escrever uma função em ~ / .zshrc, ~ / .bashrc.

# set my env
[ -s ~/.env ] && export MYENV=`cat ~/.env`
function myenv() { [[ -s ~/.env ]] && echo $argv > ~/.env && export MYENV=$argv }

Beacause de usar variável fora, você pode evitar escrever arquivo de script.


Answer #4

Para exportar a variável VAR primeiro, a maneira mais lógica e que parece funcionar é a fonte da variável:

. ./export.bash

ou

source ./export.bash

Agora, quando ecoando do shell principal, funciona

 echo $VAR
HELLO, VARABLE

Vamos agora redefinir VAR

export VAR=""
echo $VAR

Agora vamos executar um script para buscar a variável e depois desmarcá-la:

./test-export.sh 
HELLO, VARABLE
--
.

o código: cat test-export.sh

    #!/bin/bash
    # Source env variable
    source ./export.bash

    # echo out the variable in test script
    echo $VAR

    # unset the variable 
    unset VAR
    # echo a few dotted lines
    echo "---"
    # now return VAR which is blank
    echo $VAR

Aqui está um jeito

ATENÇÃO: As exportações são limitadas ao script que executa as exportações em seu console principal - assim, na medida em que um cron job eu gostaria de adicioná-lo como o console como abaixo ... para a parte de comando ainda questionável: aqui está como você faria executar a partir do seu shell:

No seu prompt de comando (desde que o export.bash tenha vários valores de eco)

IFS=$'\n'; for entries in $(./export.bash); do  export $entries;  done; ./v1.sh 
HELLO THERE
HI THERE

gato v1.sh

#!/bin/bash
echo $VAR
echo $VAR1

Agora, desde que isso seja para o seu uso - você poderia tornar as variáveis ​​disponíveis para seus scripts a qualquer momento, fazendo um alias bash como este:

myvars ./v1.sh
HELLO THERE
HI THERE

echo $VAR

.

adicione isto ao seu .bashrc

function myvars() { 
    IFS=$'\n'; 
    for entries in $(./export.bash); do  export $entries;  done; 

    "[email protected]"; 

    for entries in $(./export.bash); do variable=$(echo $entries|awk -F"=" '{print $1}'); unset $variable;
done

}

fonte seu arquivo bashrc e você pode fazer como acima a qualquer momento ...

De qualquer forma de volta para o resto do mesmo ..

Isso tornou disponível globalmente, em seguida, executou o script ..

Simplesmente faça eco e execute a exportação no eco!

cat export.bash

#!/bin/bash
echo "VAR=HELLO THERE"

Agora, dentro do script ou do seu console, execute:

 export "$(./export.bash)"

Experimentar:

echo $VAR
HELLO THERE

Vários valores, desde que você saiba o que espera em outro script usando o método acima:

cat export.bash

#!/bin/bash
echo "VAR=HELLO THERE"
echo "VAR1=HI THERE"

cat test-export.sh

#!/bin/bash

IFS=$'\n'
for entries in $(./export.bash); do
   export $entries
done

echo "round 1"
echo $VAR
echo $VAR1

for entries in $(./export.bash); do
     variable=$(echo $entries|awk -F"=" '{print $1}');
     unset $variable
done

echo "round 2"
echo $VAR
echo $VAR1

Agora os resultados

 ./test-export.sh 
round 1
HELLO THERE
HI THERE
round 2


.

e a última atualização final para atribuição automática lê as VARIABLES:

./test-export.sh 
Round 0 - Export out then find variable name - 
Set current variable to the variable exported then echo its value
$VAR has value of HELLO THERE
$VAR1 has value of HI THERE
round 1 - we know what was exported and we will echo out known variables
HELLO THERE
HI THERE
Round 2 - We will just return the variable names and unset them 
round 3 - Now we get nothing back

O script: cat test-export.sh

#!/bin/bash

IFS=$'\n'
echo "Round 0 - Export out then find variable name - "
echo "Set current variable to the variable exported then echo its value"
for entries in $(./export.bash); do
 variable=$(echo $entries|awk -F"=" '{print $1}');
 export $entries
 eval current_variable=\$$variable
 echo "\$$variable has value of $current_variable"
done


echo "round 1 - we know what was exported and we will echo out known variables"
echo $VAR
echo $VAR1

echo "Round 2 - We will just return the variable names and unset them "
for entries in $(./export.bash); do
 variable=$(echo $entries|awk -F"=" '{print $1}');
 unset $variable
done

echo "round 3 - Now we get nothing back"
echo $VAR
echo $VAR1

Answer #5

Outra solução que, dependendo do caso, pode ser útil: criar outro bash que herda a variável exportada. É um caso particular de resposta @Keith Thompson, será todos esses inconvenientes.

export.bash:

# !/bin/bash
export VAR="HELLO, VARIABLE"
bash

Agora:

./export.bash
echo $VAR

Answer #6

Executar

set -o allexport

Quaisquer variáveis ​​que você obter de um arquivo depois disso serão exportadas no seu shell.

source conf-file

Quando terminar, execute. Isso desativará o modo allexport.

set +o allexport




environment-variables