1 votes

Xargs: Opération non autorisée lors de l'appel du script bash à partir de l'événement fswatch

Je cherche à surveiller un dossier spécifique et à exécuter un script s'il y a un changement dans le dossier. Pour cela, j'utilise la commande fswatch ci-dessous (le système d'exploitation est Monterey [12.0.1]) :

fswatch -o ~/Desktop/iosBuildZips | xargs -n1 -I{} ~/Desktop/scripts/script.sh

comme indiqué dans cette question.

fswatch enregistre avec succès un changement de fichier dans le dossier défini, mais une erreur se produit lorsque fswatch essaie d'appeler script.sh :

xargs: /Users/myusername/Desktop/scripts/script.sh: Operation not permitted

Capture d'écran

enter image description here


Je ne suis pas très familier avec macOS, j'ai donc essayé d'utiliser ''chmod 777'' sur tous les dossiers concernés.

Mais cela produit la même erreur.

Capture d'écran

enter image description here


Je reçois également l'erreur lorsque je précède la commande fswatch de sudo...

Pourquoi ai-je cette erreur, et comment puis-je la résoudre ?

Je ne pense pas que le contenu de script.sh soit pertinent, puisque j'obtiens la même erreur même si script.sh contient seulement une commande echo abc, mais pour complétude, voici le contenu de script.sh.

echo Décompression du fichier de build reçu
unzip ~/Desktop/iosBuildZips/iosBuild.zip -d ~/Desktop/iosBuild
cd ../iosBuild
pod install

2voto

jaume Points 13186

La raison pour laquelle xargs retourne Operation not permitted est que script.sh n'a pas le bit d'exécution activé.

Comment activer le bit d'exécution ?

Pour rendre le script exécutable, il suffit de taper :

chmod a+x ~/Desktop/scripts/script.sh

ce qui active le bit d'exécution (x) pour tous les utilisateurs (a).

Qu'est-ce que le bit d'exécution de toute façon ?

Les systèmes d'exploitation de type UNIX utilisent traditionnellement un système de "mode" pour, entre autres, indiquer si un fichier est lisible, modifiable ou exécutable. Dans ce contexte, il est courant de parler du "bit d'exécution" pour indiquer si un fichier est exécutable.

Pour voir le mode d'un fichier, il suffit de taper ls -l : le mode est codé dans le premier bloc d'informations affiché. Par exemple, si vous tapez ls -l /bin/cp, vous verrez que la sortie ressemble à ceci :

-rwxr-xr-x  1 root  wheel   152672 May  9 23:30 /bin/cp

Dans l'exemple ci-dessus, -rwxr-xr-x est le mode du fichier, ce qui dans ce cas particulier rend le fichier lisible et exécutable pour tous, et modifiable pour le propriétaire, c'est-à-dire l'utilisateur root.

Pour plus d'informations sur les modes de fichier et comment les interpréter, voir https://fr.wikipedia.org/wiki/Permissions_sur_un_système_de_fichiers et https://fr.wikipedia.org/wiki/Chmod.

1voto

Marc Wilson Points 3640

~/Desktop est un dossier protégé.

xargs ne peut pas lire le script, c'est ce que signifie "Opération non permise".

$ # Le terminal n'a pas un accès complet au disque...
$
$ echo abc | xargs -n1 -I{} ~/Desktop/scripts/test.sh
ksh: /Users/mwilson/Desktop/scripts/test.sh: ne peut pas ouvrir [Opération non permise]
$
$ # Donnez un accès complet au disque au terminal...
$
$ echo abc | xargs -n1 -I{} ~/Desktop/scripts/test.sh
test!
$

Donnez à xargs le pouvoir de lire le script ou ne stockez pas le script dans un dossier protégé.

1voto

ChrisC Points 173

Je ne suis pas sûr pourquoi (puisque je ne suis pas trop familier avec zshell, bash, et ainsi de suite), mais il semble que j'ai dû appeler script.sh à partir de bash. c'est-à-dire:

fswatch -o ~/Desktop/iosBuildZips | xargs -n1 -I{} bash ~/Desktop/scripts/script.sh

Maintenant les commandes dans script.sh s'exécutent effectivement lorsqu'il y a un changement dans ~/Desktop/iosBuildZips.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X