Outra maneira é chamar o intérprete e passar o caminho para o script:
/bin/sh /path/to/script
O ponto e a fonte são equivalentes. (EDIT: não, não são: como KeithB aponta em um comentário em outra resposta, "." Só funciona em shells relacionados ao bash, onde "source" funciona nos shells relacionados ao bash e csh.) Ele executa o script em -place (como se você tivesse copiado e colado 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 gravar um CD em um diretório, você ainda estará lá quando terminar.
As outras maneiras de executar um script o executarão em seu próprio subshell. Variáveis no script ainda não estão ativas quando terminar. Se o script alterou os diretórios, não afetou 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 intérprete diferente do que quando você o executa, ele pode se comportar de maneira diferente (ou pode não funcionar).
Por exemplo, scripts Perl e 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.
Na verdade, o Ubuntu não usa o shell bash, mas um muito semelhante chamado dash. Os scripts que requerem bash podem funcionar um pouco errados quando chamados, /bin/sh script
porque você acabou de chamar um script bash usando o interpretador de traços.
Outra pequena diferença entre chamar o script diretamente e passar o caminho do script para o intérprete é que o script deve ser marcado como executável para executá-lo diretamente, mas não para executá-lo passando o caminho para o intérprete.
Outra variação menor: você pode prefixar qualquer uma dessas maneiras de executar um script com eval, para poder ter
eval sh script
eval script
eval . script
e assim por diante. Na verdade, não muda nada, mas pensei em incluí-lo por completo.