Embora as duas respostas existentes já sejam excelentes, sinto o exemplo de que o efeito é o mais "perceptível", por assim dizer, está faltando.
Digamos que eu tenha um arquivo script.sh
com o seguinte conteúdo:
cd dir
Se eu executasse este script normalmente ( sh script.sh
), eu veria isto:
olle@OMK2-SERVER:~$ sh script.sh
olle@OMK2-SERVER:~$
Mas se eu for o local do script ( . script.sh
), acabaria com isso:
olle@OMK2-SERVER:~$ . script.sh
olle@OMK2-SERVER:~/dir$
Observe como no segundo caso o diretório de trabalho do nosso shell principal mudou!
Isso ocorre porque (como apontado nas outras respostas) o primeiro exemplo é executado em sua própria subshell (o processo sh
começamos com o comando sh
, isso poderia ser basicamente qualquer shell, bash
, dash
, você nomeia), ele muda de diretório lá, não faz nada e fecha. Enquanto o segundo exemplo é executado em nosso shell principal e, portanto, muda o diretório para lá!