Verifique se noexec
não está em vigor no ponto de montagem em questão. Ou escolha um lugar melhor para iniciar seu script.
$ mount | grep noexec
[ snip ]
shm on /dev/shm type tmpfs (rw,nosuid,nodev,noexec,relatime)
$ cat > /dev/shm/some_script
#!/bin/sh
echo hi
$ chmod +x /dev/shm/some_script
$ /dev/shm/some_script
bash: /dev/shm/some_script: Permission denied
$ mv /dev/shm_script .
$ ./some_script
hi
noexec
existe especificamente para evitar problemas de segurança que surgem em ter locais graváveis do mundo que armazenam arquivos executáveis; você pode colocar um arquivo lá, mas outra pessoa pode reescrevê-lo antes de executá-lo, e agora você não está executando o código que pensou que fosse.