Tenho várias contas do Amazon EC2 e desejo poder alternar rapidamente variáveis, como $EC2_HOME
usar 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 pensei que o uso export
faria a variável permanecer após a conclusão do script. Isso não acontece, pois a execução echo $EC_HOME
não mostra nada.
Eu sei que isso deve ser um conhecimento de script do Linux muito rudimentar, mas não o conheço. Tentei procurar perguntas relacionadas sem sorte - portanto, peço desculpas se for uma cópia.
.
ousource
não está gerando um novo processo filho, está executando os comandos no shell atual..
ousource
. Por que isso está acontecendo ?exit
declaração, por isso não é adequado obter fontes.source ./script
funciona completamente bem,sudo source ./script.sh
dizsudo: source: command not found
. Como posso fazer isso usando o sudo?sudo
e das definições de configuração,/etc/sudoers
você pode ou não pode preservar seu ambiente ao executar comandos comsudo
. Eu sugiro que você tente fonte seu script e, em seguida, executesudo
com a-E
opção para preservar o ambiente. Se não funcionar, suponho que você pode fazer muito pouco.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 por perto, origine o script em seu shell atual:
ou de forma equivalente (mas um pouco mais portável) use o comando ponto POSIX :
Em seguida, as definições serão colocadas no ambiente atual do shell e serão herdadas por quaisquer programas iniciados a partir dele.
Para estar mais perto de executar um script,
. a.sh
você encontrará o a.sh pesquisando os diretórios naPATH
variável de ambiente.Existem algumas sutilezas na forma como elas se comportam e se são
.
esource
são iguais (ou presentes).. ./a.sh
definitivamente se comportará da mesma maneira em todos os shell compatíveis com POSIX, massource
and.
, and. a.sh
e. ./a.sh
, podem variar. Para o Bashsource
e.
são iguais em todos os casos; O zshsource
sempre verifica primeiro o diretório atual ; O ksh é essencialmente semelhante.Se o nome do script for fornecido como um caminho (contendo a
/
), esse caminho será usado diretamente em todos os casos. A coisa mais portávelmente confiável a fazer é. ./script
ou. /path/to/script
.fonte
Apenas para registro.
Se você deseja executar o script da internet que exporta env para o sistema
você pode usar o seguinte formato
Por exemplo:
fonte