Eu escrevi o script a seguir para definir algumas variáveis de ambiente quando necessário.
#!/bin/sh
export BASE=/home/develop/trees
echo $BASE
export PATH=$PATH:$BASE
echo $PATH
Abaixo do comando e dos resultados que posso ver no meu terminal: o script é executado, mas as variáveis não são definidas no final.
~$: ./script.sh
/home/develop/trees
/bin:......:/home/develop/trees
~$: echo $BASE
~$:
O que há de errado? Desde já, obrigado. Mirko
fonte
export
passar variáveis para os subshells, um subshell é uma cópia do seu shell atual, incluindo variáveis e funções etc. As variáveis exportadas são copiadas para novos processos gerados no shell, independentemente de esse processo ser outro shell ou não. Em segundo lugar,.
é o comando POSIX para fornecimento. O Bash é adicionadosource
como um sinônimo mais legível, mas você não pode confiar que ele esteja disponível no sh. Por fim, em. ./script
vez de. script
se você quiser evitar surpresas. mywiki.wooledge.org/BashFAQ/060Quando você executa um script, ele é executado em um subshell. As variáveis são válidas apenas dentro do contexto desse subshell. Defina-os no seu
.bashrc
ou.profile
e leia as variáveis e subshells . Aexport
instrução trabalha com hierarquia (shell atual e todos os seus subshells), não como no seu exemplo.Como alternativa (se você realmente deseja que o script efetue o ambiente do seu shell atual), execute-o como:
Isso faz com que ele seja executado no seu shell atual, mas também não passa variáveis na hierarquia.
fonte
Muitas vezes, quero definir uma variável de ambiente sem problemas.
Aqui está o que eu adiciono ao meu .bashrc para implementar essa conveniência.
fonte
Você pode tentar algo como isto
fonte