Como posso fazer com que variáveis de ambiente sejam “exportadas” em um script de shell?

44

Tenho várias contas do Amazon EC2 e quero poder alterar rapidamente variáveis, como $EC2_HOME , usando um script.

Eu tenho um script de shell configurado assim:

#!/bin/sh
export EC2_HOME=/home/me/.ec2
echo $EC2_HOME

Quando executo o script, sei que EC2_HOME está definido, mas achei que usar export faria com que a variável permanecesse após o script ser concluído. Não, como correr echo $EC_HOME não mostra nada.

Eu sei que isso deve ser um conhecimento de script Linux muito rudimentar, mas eu não sei disso. Eu tentei procurar por questões relacionadas sem sorte - então minhas desculpas se isso é uma duplicata.

    
por cwd 27.01.2012 / 20:32

2 respostas

50

Você deve pesquisar seu script, com

. ./script

ou

source ./script
    
por 27.01.2012 / 21:12
33

Quando você executa um script, ele obtém seu próprio shell e seu próprio ambiente, que desaparecem novamente assim que o script é concluído. Para manter as variáveis de ambiente, insira o script no seu shell atual:

$ source ./a.sh

ou de forma equivalente (mas um pouco mais portável) use o comando POSIX dot :

$ . ./a.sh

Em seguida, as definições serão colocadas no ambiente atual da sua shell e herdadas por qualquer programa que você lançar a partir dele.

Para estar mais perto de executar um script, . a.sh encontrará a.sh pesquisando os diretórios na variável de ambiente PATH .

Existem algumas sutilezas em como elas se comportam e se . e source são iguais (ou estão presentes). . ./a.sh definitivamente se comportará da mesma forma em todos os shell compatíveis com POSIX, mas source e . e . a.sh e . ./a.sh podem variar. Para o Bash source e . são os mesmos em todos os casos; para zsh source sempre verifica primeiro o diretório atual ; ksh é essencialmente similar.

Se o nome do script for fornecido como um caminho (contendo / ), esse caminho será usado diretamente em todos os casos. A coisa mais portável e confiável a fazer é . ./script ou . /path/to/script .

    
por 27.06.2014 / 02:07