Variáveis ​​de ambiente global em um script de shell

Como definir uma variável de ambiente global em um script bash?

Se eu fizer coisas como

#!/bin/bash FOO=bar 

…ou

 #!/bin/bash export FOO=bar 

… os vars parecem permanecer no contexto local, enquanto eu gostaria de continuar usando-os depois que o script terminar de ser executado.

    Execute seu script com .

     . myscript.sh 

    Isso executará o script no ambiente atual do shell.

    export governa quais variables ​​estarão disponíveis para novos processos, então se você disser

     FOO=1 export BAR=2 ./runScript.sh 

    então $BAR estará disponível no ambiente de runScript.sh , mas $FOO não.

    Quando você executa um script de shell, ele é feito em um sub-shell, portanto ele não pode afetar o ambiente do shell pai. Você deseja criar o script fazendo:

     . ./setfoo.sh 

    Isso o executa no contexto do shell atual , não como um sub shell.

    Da página do homem bash:

    . nome do arquivo [argumentos]
    nome do arquivo fonte [argumentos]

    Leia e execute comandos do nome do arquivo no ambiente shell atual e retorne o status de saída do último comando executado a partir do nome do arquivo.

    Se o nome do arquivo não contiver uma barra, os nomes de arquivo no PATH serão usados ​​para localizar o diretório que contém o nome do arquivo.

    O arquivo procurado no PATH não precisa ser executável. Quando o bash não está no modo POSIX, o diretório atual é pesquisado se nenhum arquivo for encontrado no PATH.

    Se a opção sourcepath para o comando shopt builtin estiver desativada, o PATH não será pesquisado.

    Se algum argumento for fornecido, eles se tornarão os parâmetros posicionais quando o nome do arquivo for executado.

    Caso contrário, os parâmetros posicionais permanecem inalterados. O status de retorno é o status do último comando encerrado no script (0 se nenhum comando for executado) e false se o nome do arquivo não for encontrado ou não puder ser lido.

    source myscript.sh também é viável.

    Descrição para a source comando do linux:

     source is a Unix command that evaluates the file following the command, as a list of commands, executed in the current context 
     #!/bin/bash export FOO=bar 

    ou

     #!/bin/bash FOO=bar export FOO 

    exportação do homem:

    O shell deve dar o atributo de exportação para as variables ​​correspondentes aos nomes especificados, o que fará com que eles estejam no ambiente de comandos executados posteriormente. Se o nome de uma variável é seguido por = word, então o valor dessa variável deve ser definido como word.

     FOO=bar export FOO