O mais provável é que a partição do windows esteja montada com o sinalizador noexec ativado. Você pode confirmar na saída de:
mount
Na saída, você provavelmente verá algo como (rw,noexec) no final da linha. O noexec flag não é um padrão, então isso geralmente acontece quando é configurado explicitamente para montá-lo dessa maneira.
Quando você executa o script com bash /path/to/script.sh , ele funciona
porque nesse caso você não está executando o script,
mas você está executando bash , que interpreta o script dado em seu argumento.
Como nota adicional:
but interestingly calling it with sh works.
Como o script tem o shebang #!/bin/bash , você deve usar bash em vez de sh para executá-lo. O autor do script provavelmente usou este shebang por uma razão, e algumas implementações de sh (ou o que estiver vinculado em seu sistema) podem não suportar alguns recursos do Bash.
Finalmente,
para poder executar o script diretamente,
você poderia tentar montar a unidade com exec flag em vez de noexec ,
mas primeiro pense se isso é realmente uma boa ideia ou não.
O padrão de montagem com noexec é para um recurso de segurança,
para impedir a execução acidental de arquivos potencialmente perigosos provenientes de fontes não confiáveis. Eu não acho que você deveria mudar isso. Basta executar com bash .