Se o Terminal do macOS relatar “permissão negada” ao executar um script shell local, primeiro verifique se você está na pasta correta e consegue ler o arquivo. Em seguida, adicione permissão de execução para o seu usuário com chmod u+x, caso pretenda executá-lo diretamente. Se isso não resolver o erro, verifique as pastas que o contêm e se o macOS está impedindo o aplicativo que iniciou o shell de acessar o arquivo. Evite usar sudo ou alterações amplas de permissão como primeira solução.

1. Confirme o caminho do script e sua pasta atual

Abra o Terminal e navegue até a pasta que contém o script. Coloque o caminho entre aspas se ele contiver espaços:

cd "/Users/yourname/Projects/My Scripts"
ls -l "./build.sh"

Substitua o caminho e o nome do arquivo de exemplo pelos seus próprios. A saída de ls -l mostra as permissões e o proprietário do arquivo. Se indicar que o arquivo não pode ser encontrado, localize a pasta correta ou use o caminho completo. Um caminho relativo como ./build.sh significa “build.sh na pasta atual”; ele não procura em outras pastas.

2. Adicione permissão de execução ao seu script

Se o arquivo existir e você for o proprietário, adicione permissão de execução apenas para a sua conta e, em seguida, execute-o a partir de sua pasta:

chmod u+x "./build.sh"
./build.sh

O guia de scripts shell da Apple usa chmod u+x antes de executar um script. O u limita a alteração ao proprietário do arquivo; +x adiciona permissão para executar. Isso é mais restrito do que chmod 777, que concede permissões de leitura, gravação e execução a todos. Apple’s Shell Script Basics

Se o Terminal ainda indicar “permissão negada”, inspecione as permissões novamente com ls -l. Você também pode verificar quem é o proprietário do arquivo com ls -l e o nome da sua conta com whoami. Se outra conta for proprietária do script e você não tiver permissão para alterá-lo, use uma cópia em uma pasta da qual seja proprietário ou peça ao proprietário ou administrador que conceda o acesso apropriado. Não assuma a propriedade de arquivos do sistema como um atalho.

3. Verifique o acesso às pastas e o conteúdo do script

A execução requer acesso por todo o caminho, bem como permissão no próprio script. Verifique as pastas pai do script se você não conseguir entrar no diretório dele ou acessar o arquivo. Se ele estiver em um volume compartilhado, externo ou gerenciado, suas regras de acesso podem ser diferentes; tente usar uma cópia em uma pasta da qual você seja proprietário, desde que copiá-lo seja adequado.

Se o comando retornar Permission denied enquanto o script estiver tentando criar ou modificar um arquivo de saída, o script pode ser executável, mas não ter acesso de gravação a esse destino. Verifique a pasta de destino e o caminho no script. Não torne o script gravável ou executável por todos apenas para contornar um erro.

Para um script dentro de Mesa (Desktop), Documentos ou Downloads, os controles de privacidade do macOS também podem ser relevantes quando um aplicativo diferente do Terminal estiver iniciando-o. Em Ajustes do Sistema, abra Privacidade e Segurança > Arquivos e Pastas e revise o acesso listado para o aplicativo envolvido. A Apple descreve esses controles como acesso por aplicativo a locais específicos. Um erro de permissões vindo de um comando do shell não é, por si só, prova de que essa configuração de privacidade é a causa. Apple: Controle o acesso a arquivos e pastas no Mac

4. Se a execução direta falhar, execute o interpretador explicitamente

Um script pode ter permissão de leitura pela sua conta, mas não ter permissão de execução. Se for um script shell, você pode solicitar ao seu interpretador que o leia e execute diretamente:

/bin/sh "./build.sh"

Use isso apenas quando o script for destinado ao sh. Se a primeira linha indicar outro interpretador, como o Bash, use esse interpretador; a linha do interpretador (a linha #!) especifica como o script deve ser executado. A Apple recomenda incluir essa linha para manter a consistência. Apple’s Shell Script Basics

Executar por meio de um interpretador pode contornar a necessidade de permissão de execução no arquivo do script, mas não concede permissão para ler o script ou acessar os arquivos que ele utiliza. Se a mensagem mudar para um interpretador ausente ou erro de sintaxe, trate desse problema específico; trata-se de um problema diferente da permissão de execução.

5. Não use sudo nem desative proteções de segurança como um atalho

sudo executa um comando com privilégios elevados; isso não corrige um arquivo ausente, um caminho incorreto ou um script que você não verificou. Use-o apenas quando entender por que a tarefa requer acesso de administrador e confiar na origem e no conteúdo do script. Alterações amplas como chmod 777 podem expor arquivos à modificação por outros usuários.

A mensagem de “permissão negada” de um script shell também é diferente de um aviso do Gatekeeper sobre um aplicativo que o macOS não pode verificar. As etapas documentadas pela Apple para “Abrir Mesmo Assim” se aplicam a um alerta de aplicativo e exigem a certeza de que o aplicativo é confiável; elas não são uma solução geral para permissões de arquivos no shell. Apple: Abra apps com segurança no Mac

Diagnóstico rápido

  • ./script.sh: permission denied imediatamente: verifique a permissão de execução do arquivo; se você for o proprietário e confiar nele, tente chmod u+x "./script.sh".
  • O arquivo não pode ser encontrado: verifique sua pasta atual e o nome exato do arquivo.
  • O script inicia, mas um comando é negado: verifique o arquivo ou pasta específico que o comando está tentando acessar.
  • Um alerta do aplicativo informa que o desenvolvedor não pode ser verificado: siga as orientações de segurança de aplicativos da Apple somente após verificar a origem do aplicativo; esse alerta é independente da permissão de execução do shell.

Essas verificações delimitam o problema ao caminho do script, ao seu bit de execução, ao acesso a um arquivo usado por ele ou a um controle de privacidade ou segurança específico do aplicativo. Altere apenas a permissão ou configuração que corresponda às evidências e execute novamente o mesmo comando para ver se o erro mudou.

Fontes