Sistemas de arquivos são frequentemente montados noexec,nosuid
por padrão para aumentar um pouco a segurança. Portanto, mesmo que você veja o bit executável no conjunto de arquivos, o kernel se recusará a executá-lo. Ao chamá-lo na forma de interpreter path/to/script
, você está solicitando que o sistema execute interpreter
, que por sua vez recebe path/to/script
como um argumento e analisa-o ignorando a restrição imposta pelo sistema de arquivos (você pode conseguir o mesmo efeito com executáveis compilados com: /lib/ld-linux.so.1 path/to/executable
).
Assim, uma opção é mount -o exec ...
. Você pode querer colocar a opção em /etc/fstab
- geralmente substituindo a opção defaults
por defaults,exec
. No entanto, a menos que você realmente saiba o que está fazendo, eu aconselho contra isso.
Quanto aos detalhes BASH, acredito que bash
os interprete mesmo quando estiver executando como sh
. E você está definitivamente livre para invocá-lo como bash path/to/script
.