Quando você cria foo.sh, Ctrl + Z (SUSP) simplesmente pára o comando atualmente em execução em foo.sh e o shell continua com o próximo comando em foo.sh.
Eu não acho que haja uma maneira de contornar isso. Se você quer ser capaz de suspender todo o arquivo foo.sh, você deve executá-lo como um subprocesso, invocando-o como um comando e não fazendo o sourcing.