Si le Terminal de macOS indique « permission denied » lorsque vous lancez un script shell local, vérifiez d’abord que vous êtes dans le bon dossier et que vous pouvez lire le fichier. Ajoutez ensuite l’autorisation d’exécution pour votre utilisateur avec chmod u+x, si vous avez l’intention de l’exécuter directement. Si cela ne résout pas l’erreur, vérifiez les dossiers parents et regardez si macOS empêche l’application ayant lancé le shell d’accéder au fichier. Évitez d’utiliser sudo ou des modifications de permissions trop larges comme première solution.
1. Confirmez le chemin du script et votre dossier actuel
Ouvrez Terminal et déplacez-vous dans le dossier contenant le script. Mettez le chemin entre guillemets s’il contient des espaces :
cd "/Users/yourname/Projects/My Scripts"
ls -l "./build.sh"
Remplacez l’exemple de chemin et de nom de fichier par les vôtres. La sortie de ls -l affiche les autorisations et le propriétaire du fichier. S’il est indiqué que le fichier est introuvable, localisez le bon dossier ou utilisez le chemin d’accès complet. Un chemin relatif tel que ./build.sh signifie « build.sh dans le dossier actuel » ; il ne cherche pas dans d’autres dossiers.
2. Ajoutez l’autorisation d’exécution à votre script
Si le fichier existe et qu’il vous appartient, ajoutez l’autorisation d’exécution uniquement pour votre compte, puis lancez-le depuis son dossier :
chmod u+x "./build.sh"
./build.sh
Le guide de programmation de scripts shell d’Apple utilise chmod u+x avant d’exécuter un script. Le u limite la modification au propriétaire du fichier ; +x ajoute le droit d’exécution. C’est plus restrictif que chmod 777, qui accorde des droits de lecture, d’écriture et d’exécution à tout le monde. Apple’s Shell Script Basics
Si Terminal affiche toujours « permission denied », inspectez à nouveau les autorisations à l’aide de ls -l. Vous pouvez également vérifier le propriétaire du fichier avec ls -l et le nom de votre compte avec whoami. Si un autre compte possède le script et que vous n’avez pas les droits pour le modifier, utilisez une copie dans un dossier qui vous appartient ou demandez au propriétaire ou à l’administrateur de vous accorder l’accès approprié. Ne vous appropriez pas des fichiers système en guise de raccourci.
3. Vérifiez l’accès aux dossiers et le contenu du script
L’exécution nécessite un accès via l’ensemble du chemin d’accès ainsi que des autorisations sur le script lui-même. Vérifiez les dossiers parents du script si vous ne pouvez pas accéder à son répertoire ou atteindre le fichier. S’il se trouve sur un volume partagé, externe ou géré, ses règles d’accès peuvent être différentes ; tentez de le copier dans un dossier qui vous appartient, sous réserve que la copie soit autorisée.
Si votre commande renvoie plutôt Permission denied pendant que le script tente de créer ou de modifier un fichier de sortie, le script est peut-être exécutable mais ne dispose pas des droits d’écriture pour cette destination. Vérifiez le dossier de destination et le chemin indiqué dans le script. Ne rendez pas le script accessible en écriture ou exécutable par tous simplement pour contourner une erreur.
Pour un script situé dans Bureau, Documents ou Téléchargements, les contrôles de confidentialité de macOS peuvent également entrer en jeu lorsqu’une application autre que Terminal le lance. Dans Réglages Système, ouvrez Confidentialité et sécurité > Fichiers et dossiers et vérifiez les accès répertoriés pour l’application concernée. Apple décrit ces contrôles comme un accès par application à des emplacements spécifiques. Une erreur d’autorisation provenant d’une commande shell n’est pas en soi la preuve que ce paramètre de confidentialité en est la cause. Apple : Contrôler l’accès aux fichiers et dossiers sur Mac
4. En cas d’échec de l’exécution directe, exécutez l’interpréteur explicitement
Un script peut être lisible par votre compte mais ne pas disposer des droits d’exécution. S’il s’agit d’un script shell, vous pouvez demander directement à son interpréteur de le lire et de le lancer :
/bin/sh "./build.sh"
N’utilisez cette méthode que si le script est conçu pour sh. Si sa première ligne mentionne un autre interpréteur, tel que Bash, utilisez plutôt cet interpréteur ; la ligne de l’interpréteur (la ligne #!) spécifie la manière dont un script est censé être exécuté. Apple recommande d’inclure cette ligne par souci de cohérence. Apple’s Shell Script Basics
L’exécution via un interpréteur permet d’éviter d’avoir besoin de l’autorisation d’exécution sur le fichier de script, mais elle n’accorde pas l’autorisation de lire le script ni d’accéder aux fichiers qu’il utilise. Si le message d’erreur signale un interpréteur manquant ou une erreur de syntaxe, traitez ce problème précis ; il s’agit d’un problème distinct de l’autorisation d’exécution.
5. N’utilisez pas sudo et ne désactivez pas les protections de sécurité par facilité
sudo exécute une commande avec des privilèges élevés ; cela ne résout pas un fichier manquant, un mauvais chemin d’accès ou un script que vous n’avez pas vérifié. Ne l’utilisez que si vous comprenez pourquoi la tâche requiert des accès administrateur et si vous avez confiance en la source et le contenu du script. Des modifications d’envergure telles que chmod 777 peuvent exposer des fichiers à des modifications par d’autres utilisateurs.
Le message « permission denied » d’un script shell diffère également d’un avertissement de Gatekeeper concernant une application que macOS ne peut pas vérifier. Les étapes documentées par Apple concernant l'option « Ouvrir quand même » s’appliquent à une alerte d’application et exigent d’avoir la certitude que l’application est fiable ; elles ne constituent pas une solution générale pour les permissions de fichiers dans le shell. Apple : Ouvrir des apps en toute sécurité sur votre Mac
Diagnostic rapide
./script.sh: permission deniedimmédiatement : vérifiez l’autorisation d’exécution du fichier ; s’il vous appartient et que vous lui faites confiance, essayezchmod u+x "./script.sh".- Le fichier est introuvable : vérifiez votre dossier actuel et le nom exact du fichier.
- Le script démarre, puis une commande est refusée : vérifiez le fichier ou dossier spécifique auquel cette commande tente d’accéder.
- Une alerte signale que le développeur ne peut être vérifié : appliquez les consignes de sécurité d’Apple concernant les applications seulement après avoir vérifié la provenance de l’application ; cette alerte est distincte de l’autorisation d’exécution du shell.
Ces vérifications permettent de cibler le problème : chemin du script, bit d'exécution, accès à un fichier requis, ou contrôle de confidentialité ou de sécurité lié à une application spécifique. Modifiez uniquement la permission ou le réglage correspondant aux constats faits, puis réexécutez la même commande pour voir si l’erreur persiste.
Sources
- Shell Script Basics — Apple Developer
- Contrôler l’accès aux fichiers et dossiers sur Mac — Assistance Apple
- Ouvrir des apps en toute sécurité sur votre Mac — Assistance Apple