Outra maneira é chamar o interpretador e passar o caminho para o script:
/bin/sh /path/to/script
O ponto e a fonte são equivalentes. (EDIT: não, eles não são: como KeithB aponta em um comentário em outra resposta, "." Só funciona em shells relacionadas a bash, onde "source" funciona tanto em shells relacionadas a bash quanto csh). -place (como se você copiou e colou o script ali). Isso significa que quaisquer funções e variáveis não locais no script permanecem. Isso também significa que se o script fizer um cd em um diretório, você ainda estará lá quando estiver pronto.
As outras formas de executar um script serão executadas em sua própria sub-rede. Variáveis no script ainda não estão ativas quando é feito. Se o script alterou os diretórios, isso não afeta o ambiente de chamada.
/ path / to / script e / bin / sh script são ligeiramente diferentes. Normalmente, um script tem um "shebang" no começo que se parece com isso:
#! /bin/bash
Este é o caminho para o interpretador de scripts. Se ele especificar um interpretador diferente do que você faz quando você o executa, então ele pode se comportar de maneira diferente (ou pode não funcionar de todo).
Por exemplo, os scripts Perl e os scripts Ruby começam com (respectivamente):
#! /bin/perl
e
#! /bin/ruby
Se você executar um desses scripts executando /bin/sh script
, eles não funcionarão.
O Ubuntu na verdade não usa o shell bash, mas um muito similar chamado dash. Scripts que exigem o bash podem funcionar um pouco errado quando chamados fazendo /bin/sh script
, porque você acabou de chamar um script bash usando o interpretador de traço.
Outra pequena diferença entre chamar diretamente o script e passar o caminho do script para o interpretador é que o script deve estar marcado como executável para executá-lo diretamente, mas não para executá-lo passando o caminho para o interpretador.
Outra pequena variação: você pode prefixar qualquer uma destas maneiras de executar um script com eval, então, você pode ter
eval sh script
eval script
eval . script
e assim por diante. Na verdade, isso não muda nada, mas eu pensei em incluí-lo por completo.