A seguinte linha é o culpado:
. Script.sh $source
Embora seja possível fazer recursão dessa maneira, é difícil raciocinar, porque as variáveis alteradas no próximo nível de recursão também são alteradas no chamador. Provavelmente você só quer invocá-lo sem ter que fazer isso:
Script.sh $source
Ou melhor ainda:
"$0" "$source"
A obtenção confiável do script de origem em todos os casos é um pouco complicada, no entanto. Muito melhor ainda é usar funções para fazer recursão (no Bash):
function f()
{
...
f different_args
...
}
E declare todas as variáveis usadas em f
as local
para que elas não sejam transformadas pela chamada recursiva para f
.