Quando você executa ./s , você diz ao kernel para executar o programa s . Se você tem permissão de execução, o kernel lê os primeiros bytes do arquivo, vê a linha #! para saber que é um script e executa o interpretador, passando o nome do script como primeiro argumento. Se você não tem permissão de execução, o kernel aborta a execução na primeira etapa.
Quando você executar zsh s , você executará zsh e instruirá para ler o arquivo chamado s e interpretá-lo como comandos. Você não está executando s , está executando zsh . Mesma coisa com sh s ou cat s .
Quando você executa source s , novamente, você diz ao zsh para ler um arquivo, então o que importa é que você tenha permissão de leitura nele.