Primeiro de tudo . file não executa o arquivo, ele o origina. Isso pode soar como um ponto pedante, mas há uma diferença importante. Quando você executa um arquivo, ele é executado em seu próprio subshell; quaisquer variáveis definidas nele, por exemplo, não serão propagadas para a sessão pai. Para ilustrar, considere este script ( foo.sh ) que simplesmente define uma variável e depois a imprime:
foo="bar"
echo "In the script, foo is $foo"
Agora, vamos definir a variável foo para algo, depois executar esse script e, quando terminar, echo $foo :
$ foo="baz"
$ bash foo.sh
In the script, foo is bar
$ echo $foo
baz
Como você pode ver, $foo foi definido dentro do script, mas isso não alterou o valor da variável no shell pai. Compare o que precede com o que acontecerá se nós fornecermos o script:
$ . foo.sh
In the script, foo is bar
$ echo $foo
bar
Desta vez, como o script foi originado, a variável também foi alterada no shell pai.
O > file é mais simples. O operador > abre um arquivo (ou o cria, se ele não existir) para gravação e sobrescreve imediatamente qualquer coisa que já esteja no arquivo. Portanto, se você executar apenas > file com nada mais, o > esvaziará o arquivo, se existir.