Você deve pesquisar seu script, com
. ./script
ou
source ./script
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.
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 .