executando o script com “. ”E com“ source ”

21
  1. Eu queria saber se as duas maneiras a seguir de executar um script bash são equivalentes?

    . ./myScript.sh
    
    source myScript.sh
    
  2. Eles estão executando o conteúdo do script em vez de executar o script, ou seja, não estão criando um subnível para executar o script?
por Tim 01.08.2011 / 18:33

2 respostas

18
  1. Eles são equivalentes no bash em que eles fazem exatamente a mesma coisa. Por outro lado, source tem 5 caracteres a mais e não é portável para shells somente POSIX ou Bourne, enquanto . (ponto) é, então eu nunca me incomodo em usar source .

  2. Isso está correto - a obtenção de um arquivo executa os comandos no shell atual e isso afetará o ambiente atual do shell. Você ainda pode passar argumentos para o arquivo originado e o bash realmente procurará $PATH pelo nome do arquivo como um comando normal, se ele não contiver barras.

Não relacionado à pergunta original de . vs source , mas no seu exemplo,

. ./myScript.sh 

não é idêntico a

source myScript.sh

porque, embora . e source sejam funcionalmente idênticos, myScript.sh e ./myScript.sh não são iguais. Como ./myScript.sh contém uma barra, ele é interpretado como um caminho e o shell usa apenas ./myScript.sh . No entanto, myScript.sh não possui uma barra, portanto, o shell faz uma pesquisa $PATH primeiro. Este é o comportamento padrão POSIX especificado para . . A maioria das shells é padronizada, embora possam adicionar extensões (como pesquisar no diretório de trabalho atual após a pesquisa de caminho) ou opções para alterar o comportamento de . / source .

    
por 02.08.2011 / 11:40
6

Sim, eles são equivalentes. Não há diferença funcional; . é apenas um sinônimo interno para source .

(Edit: Aparentemente, isso só é verdade para bash e zsh . Alguns shells mais leves não têm source , apenas . é especificado por POSIX, então ksh , dash , ash , etc. pode não ter source . Consulte resposta do jw013 para informações.)

    
por 01.08.2011 / 18:51