Eu queria saber se as duas maneiras a seguir de executar um script bash são equivalentes?
. ./myScript.sh source myScript.sh
- Ambos estão executando o conteúdo do script em vez de executá-lo, ou seja, não criando um subshell para a execução do script?
bash
shell
shell-script
Tim
fonte
fonte
man .
,man source
ou o que eu ainda não sei.type .
ehelp .
man $SHELL
,/source
Respostas:
Eles são equivalentes no bash, pois fazem exatamente a mesma coisa. Por outro lado,
source
tem 5 caracteres a mais e não é portátil para shells somente POSIX ou Bourne, enquanto.
(ponto) é, então nunca me incomodo em usá-losource
.Isso está correto - o fornecimento de um arquivo executa os comandos no shell atual e isso afeta o ambiente atual do shell. Você ainda pode passar argumentos para o arquivo de origem e o bash realmente procurará
$PATH
o nome do arquivo como um comando normal se ele não contiver barras.Não está relacionado à pergunta original de
.
vssource
, mas no seu exemplo,não é idêntico a
porque while
.
esource
são funcionalmente idênticosmyScript.sh
e./myScript.sh
não são os mesmos. Como./myScript.sh
contém uma barra, ela é interpretada como um caminho e o shell apenas usa./myScript.sh
. No entanto,myScript.sh
não tem uma barra, então o shell a$PATH
procura primeiro. Este é o comportamento padrão especificado para POSIX.
. A maioria dos shells é padronizada para isso, 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
.fonte
/
depende do shellbash
ezsh
depende de o modo POSIX estar ativado ou não. Observe também que em muitas implementações do ksh,.
comporta-se de maneira diferentesource
.Sim, eles são equivalentes. Não há diferença funcional;
.
é apenas um sinônimo interno parasource
.(Edit: Aparentemente, isso só é verdade para
bash
ezsh
algumas conchas mais leves não têm.source
Só.
é especificado por POSIX assimksh
,dash
,ash
, etc. pode não tersource
See. Resposta das jw013 para informações.)fonte
$ alias .
saídasbash: alias: .: not found
.