export
funciona "para baixo" não "para cima". Quando você exporta um valor no script que é filho do shell, ele não o exportará para o shell que é seu pai. Isso só mudará o ambiente para seus próprios filhos.
Estou tentando definir uma variável shell para $ PWD - o caminho do qual o script foi executado. Isto é o que eu tenho, setenv.sh:
#!/bin/bash
export WORK_AREA=$PWD #also tried "$PWD", $(pwd), 'pwd'
Mas quando eu corro do shell
> ./setenv.sh
> echo $WORK_AREA
WORK_AREA não tem valor
Você precisa criar o script se quiser que ele afete seu ambiente atual de shell, por exemplo:
source setenv.sh
Ou usando a notação de pontos:
. setenv.sh
Quando você executa um script, ele é executado em um subshell, como se você o tivesse executado usando o comando bash
. As alterações no ambiente subshell não afetam o ambiente pai. Note que estamos falando apenas de variáveis de ambiente aqui. Se você modificar um arquivo em um subshell, essa mudança será definitivamente transferida para o shell pai.
Veja a postagem relacionada do SuperUser:
Tags bash shell-script