bash - working - shell script not setting environment variables




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

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?


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


A resposta é não, mas para mim eu fiz o seguinte

o script: myExport

#! \bin\bash
export $1

um alias no meu .bashrc

alias myExport='source myExport' 

Ainda assim, você pode obtê-lo, mas talvez assim seja mais útil e interessante para outra pessoa.


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

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

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.







environment-variables