Parece que quando o kernel do OS X inicia um interpretador através de uma linha shebang, ele não verifica o bit setuid no executável do interpretador. Provavelmente deve ser considerado um bug, embora seja possível que seja considerado uma medida de segurança ... mas, se for o caso, não é muito útil, porque há uma solução bastante simples:
#!/usr/bin/env /usr/bin/sudo /bin/bash
echo "running as $USER"
... isso faz o kernel passar o script para / usr / bin / env (sem verificar setuid, mas não importa aqui), que passa para / usr / bin / sudo (através do lançamento normal processo, que faz obedecer o sinalizador setuid), que muda para root e passa o script para / bin / bash.
(BTW, #!/usr/bin/env /usr/bin/sudo /usr/bin/ruby
também funciona.)