As diferenças entre os comandos iniciais no ambiente do shell interativo ou de dentro de um script são o ambiente.
Para ver as diferenças entre source foo.sh
e sh foo.sh
, você precisa saber o que acontece de qualquer forma:
-
source foo.sh
:
source
é um comando interno somente bash. Isso significa que quando você chama source
, não há nenhum executável como /bin/source
ou mais. bash
analisa a interface da linha de comando para os chamados comandos internos do shell . O comando source
é uma função interna de bash
to ...
read and execute commands from filename in the current shell
environment and return the exit status of the last command executed
from filename.
Então, é como quando você copia e cola linha por linha do seu arquivo foo.sh
e pressiona Enter depois de cada linha. Quando não há bash
em execução, também não há comando source
.
-
sh foo.sh
:
Isso chama o shell /bin/sh
padrão com um argumento, um command_file . Esse é um nome de caminho de um arquivo contendo comandos. Esse arquivo não precisa ser executável. E também não há necessidade de uma linha hashbang . Assim, um shell new é iniciado ( /bin/sh
) e nesse novo shell, o comando no arquivo é executado linha por linha. Mas, agora, o ambiente não é o ambiente atual do shell . É o ambiente gerado pelo shell.