O que significa fornecer um arquivo em um shell? [duplicado]

7

O que acontece quando eu emito o seguinte comando:

source devenv.csh

Como é diferente de executá-lo como devenv.csh ?

    
por Geek 05.02.2013 / 10:55

1 resposta

12

Quando você "apenas executa" o arquivo, o interpretador fornecido no shebang (a primeira linha do script, começando com #! , por exemplo, #!/usr/bin/csh ) é executado com devenv (ou devenv.csh , isso é um pouco inconsistente na questão) como parâmetro. Em seguida, ele executará os comandos no arquivo e terminará.

Sourceing o arquivo significa que os comandos são executados no shell atual. Quando alguns dos comandos em devenv.csh alteram o ambiente (e o nome do arquivo sugere que esse é o objetivo principal deste arquivo específico), executá-lo não terá efeito: o ambiente será alterado no subshell, mas isso terminará imediatamente, não deixando rastros das configurações alteradas. Observe que as variáveis de ambiente nunca se propagam "para cima": elas só podem ser herdadas por subprocessos, mas não pelos pais.

    
por 05.02.2013 / 11:05