Command PhaseScriptExecution failed with a nonzero exit code

herrabuk Messages postés 3 Date d'inscription samedi 14 septembre 2024 Statut Membre Dernière intervention 16 octobre 2024 - 15 oct. 2024 à 15:11
mamiemando Messages postés 33363 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 16 novembre 2024 - 17 oct. 2024 à 13:41

Bonjour,

J'utilise Xcode version 15.2 sur macOS Ventura 13.7 avec un MacBook Pro 13 pouces (modèle 2017). Je rencontre une erreur : "Command PhaseScriptExecution failed with a nonzero exit code". J'ai essayé plusieurs solutions proposées sur StackOverflow, mais aucune n'a résolu le problème.

A voir également:

2 réponses

mamiemando Messages postés 33363 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 16 novembre 2024 7 801
15 oct. 2024 à 18:10

Bonjour,

Le message d'erreur est un peu vague (il signifie en gros : le programme a planté sans plus d'information). Il faudrait plus de détails, par exemple comme dans cette discussion où visiblement le script invoqué n'a pas le droit d'être exécuté par l'utilisateur courant. Dans ton cas, rien ne permet de savoir à ce stade si tu es dans la même situation ou pas.

Bonne chance

1
herrabuk Messages postés 3 Date d'inscription samedi 14 septembre 2024 Statut Membre Dernière intervention 16 octobre 2024
16 oct. 2024 à 00:14

Merci pour ta réponse et ton temps. En effet, c'est exactement la même situation où le script invoqué n'a pas les droits d'exécution pour l'utilisateur actuel. Je vais donc suivre tes recommandations pour vérifier et ajuster les permissions d'exécution.

0
herrabuk Messages postés 3 Date d'inscription samedi 14 septembre 2024 Statut Membre Dernière intervention 16 octobre 2024 > herrabuk Messages postés 3 Date d'inscription samedi 14 septembre 2024 Statut Membre Dernière intervention 16 octobre 2024
16 oct. 2024 à 15:30
0
mamiemando Messages postés 33363 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 16 novembre 2024 7 801
17 oct. 2024 à 13:41

Bonjour,

Le problème de fond, c'est que ton utilisateur courant (ayoub) n'a pas la permission d'exécuter ce script shell. 

Diagnostic

Ci-dessous, je pars du principe que MacOs fonctionne grosso modo comme Linux ce qui doit être à 99% correct dans le cas qui nous intéresse.  

As-tu regardé les permissions associées à ce fichier ? Est-ce que les droits en exécution sont activés ? Dans un terminal :

ls -l "/chemin/vers/le/fichier.sh"

Quel est ton login (ayoub je suppose vu le message d'erreur) ? À quel groupes est-il rattaché ? À quel groupe appartient ton utilisateur ?

whoami
groups

Comprendre comment marchent les permissions

Pour expliquer le système de permissions, créons un script shell dans le dossier de ton choix (disons /Users/ayoub) avec l'éditeur de ton choix (hormis un logiciel de traitement de texte) et appelons-le toto.sh (donc son chemin absolu est /Users/ayoub/toto.sh). Dans ce fichier écrivons :

#!/bin/sh

echo "Hello world"

On sauve et quitte.

À présent dans un terminal allons dans ce dossier :

cd /Users/ayoub
ls -l toto.sh

Sous Linux on verra quelque chose comme ceci :

-rw-rw-r-- 1 ayoub ayoub 30 17 oct.  12:53 toto.sh

Ce résultat montre que le fichier appartient à l'utilisateur ayoub, au groupe ayoub. De plus on voit que l'utilisateur ayoub a des droits en lecture et écriture mais pas exécution (premier triplet rw-) et les membres du groupes ayoub ont également des droits en lecture et écriture mais pas exécution (second triplet rw-). Et tout profil qui n'est ni l'utilisateur ayoub, ni membre du groupe ayoub n'a que des droits en lecture (tripet r--). On voit ici que personne n'a de droits en exécution, et si on tente d'exécuter ce script :

/Users/ayoub/toto.sh

 ... on aura une erreur:

bash: /Users/ayoub/toto.sh: Permission non accordée

Ici on peut modifier légitimement les droits pour accorder à ce script des droits en exécution (voir section suivante)

chmod u+x toto.sh
ls -l toto.sh

Résultat :

-rwxrw-r-- 1 ayoub ayoub 30 17 oct.  12:53 toto.sh

On voit que l'utilisateur ayoub a désormais des droits en exécution (triplet rwx). Les autres droits restent intacts. Si maintenant je tente d'exécuter le script en tant que root ou en tant qu'utilisateur propriétaire, il est bien exécuté.

/Users/ayoub/toto.sh
Hello world

Comment bien gérer les permissions

Avant d'exécuter un programme il faut s'assurer un minimum qu'on a confiance dans ce qu'il fait (source ou éditeur sûrs, etc.)

  • De manière générale, relâcher les permission d'un fichier (e.g., avec chmod) est une mauvaise idée, en particulier quand il s'agit des fichiers associés au système (car on ouvre potentiellement des trous de sécurité). Ici ce n'est pas le cas, c'est un fichier qu'on a créé nous-même et on sait qu'il n'est pas malveillant.
  • Si le groupe propriétaire a des permissions suffisantes, il faut simplement ajouter l'utilisateur courant dans le groupe propriétaire.
  • Sinon, l'exécutable doit être lancé en tant que root (éventuellement via sudo).

Bonne chance

0