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
.