1 votos

xargs: Operación no permitida al llamar a bash script desde el evento fswatch

Estoy tratando de vigilar una determinada carpeta y ejecutar un script si hay un cambio en la carpeta. Para esto, estoy usando lo siguiente fswatch (el sistema operativo es Monterey [12.0.1]):

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

según la respuesta en esta pregunta .

fswatch registra con éxito un cambio de archivo en la carpeta definida, pero hay un error cuando fswatch intenta llamar a script.sh :

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

Captura de pantalla

enter image description here


No estoy muy familiarizado con MacOS, así que intenté usar ''chmod 777'' en todas las carpetas involucradas.

Pero esto produce el mismo error.

Captura de pantalla

enter image description here


También obtengo el error cuando precedo el comando fswatch con sudo...

¿Por qué recibo este error y cómo puedo solucionarlo?

No creo que sea relevante lo que hay en script.sh ya que obtengo el mismo error incluso si script.sh contiene sólo una echo abc pero para completarlo, aquí está el contenido de script.sh .

echo Unzipping received build file
unzip ~/Desktop/iosBuildZips/iosBuild.zip -d ~/Desktop/iosBuild
cd ../iosBuild
pod install

2voto

Phill Puntos 126

La razón por la que xargs devuelve Operation not permitted es que script.sh no tiene el bit de ejecución activado .

¿Cómo se configura el bit de ejecución?

Para que el script sea ejecutable, basta con ejecutar:

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

que establece el bit de ejecución ( x ) para todo ( a ).

¿Qué es la parte de ejecución?

Los sistemas operativos tipo UNIX utilizan tradicionalmente un sistema de "modo" para, entre otras cosas, describir si un archivo es legible, escribible o ejecutable. En este contexto, es habitual hablar del "bit de ejecución" para describir si un archivo es ejecutable.

Para ver el modo de un archivo, basta con ejecutar ls -l El modo se codifica en el primer bloque de información que se muestra. Por ejemplo, si se ejecuta ls -l /bin/cp Verá que el resultado es similar a este:

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

En el ejemplo anterior, -rwxr-xr-x es el modo de archivo, que en este caso particular hace que el archivo sea legible y ejecutable para todos, y escribible para el propietario, es decir, el root usuario.

Para más información sobre los modos de archivo y cómo interpretarlos, consulte https://en.wikipedia.org/wiki/File-system_permissions y https://en.wikipedia.org/wiki/Chmod .

1voto

Marc Wilson Puntos 146

~/Desktop es una carpeta protegida.

xargs no puede leer el script, eso es lo que significa "Operación no permitida".

$ # terminal does not have full disk access...
$
$ echo abc | xargs -n1 -I{} ~/Desktop/scripts/test.sh
ksh: /Users/mwilson/Desktop/scripts/test.sh: cannot open [Operation not permitted]
$
$ # give terminal full disk access...
$
$ echo abc | xargs -n1 -I{} ~/Desktop/scripts/test.sh
test!
$

Dale a xargs el poder de leer el script o no almacenes el script en una carpeta protegida.

1voto

ZigZag3143 Puntos 34

No estoy seguro de por qué (ya que no estoy muy familiarizado con zshell, bash, etc.), pero parece que tuve que llamar a script.sh de bash es decir:

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

Ahora los comandos en script.sh realmente se ejecuta cuando hay un cambio en ~/Desktop/iosBuildZips .

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X