Diferença entre “.” e “./” ao definir as variáveis de ambiente usando exportação? [duplicado]

3

Por favor, desculpe-me se não estiver claro enquanto faço perguntas. Eu tentarei o meu melhor para ser muito claro enquanto faço perguntas.

Enquanto aprendemos o Embedded Linux, estamos estabelecendo um ambiente para o nosso projeto. Escrevemos um script de shell para definir o ambiente que é semelhante a este:

export PROJECT=example-sys
export PRJROOT=/home/karim/${PROJECT}
export TARGET=powerpc-linux
export PREFIX=${PRJROOT}/tools
export TARGET_PREFIX=${PREFIX}/${TARGET}
export PATH=${PREFIX}/bin:${PATH}
cd $PRJROOT

Salvou o script como prjenv.sh . Como pratiquei executando os scripts ou qualquer executável usando ./xyz.sh ou ./abc , executei ./prjenv.sh e o shell não reclamou mas quando dei export -p para ver se as variáveis foram exportadas ou não, não consegui encontrar -los na lista.

Mais tarde, percebi que era esperado usar . prjenv.sh , depois de executar o script, definir as variáveis de ambiente.

Posso saber qual é a diferença entre . e ./ e quando usar qual?

Por favor, deixe-me saber se você precisar de mais informações.

PS: Esta é minha primeira vez trabalhando com Linux, então peço desculpas se alguns dos termos técnicos que usei estão errados.

    
por user3600064 18.05.2014 / 15:03

1 resposta

7

./script executará o arquivo script localizado no diretório atual . como um novo processo.

. script chama a função de shell . (que é um alias para source ) com o argumento script . Isso é praticamente o mesmo que inserir todas as linhas contidas no shell atual.

Você não pode definir variáveis usando a primeira opção, pois as variáveis são definidas apenas para o novo processo. As variáveis só são exportadas de pai para filho e não o contrário. (ou seja, um processo chamado não pode modificar variáveis no processo atual.)

    
por 18.05.2014 / 15:24