0 votos

Ejecutar perl shell script desde AppleScript en Mojave

Tengo un simple AppleScript que llama a un shell perl script para reemplazar una cadena con otra cadena (aquí una con dos) en archivos con extensiones de archivo especificadas (aquí .txt y .xyz).

Solía funcionar exactamente como lo tengo a continuación, pero ya no lo hace (posiblemente desde la actualización a Mojave el año pasado) .

set CleanFiles to "
    s/one/two/g;
    "

set myFolder to choose folder with prompt "Choose a folder with files to be cleaned up:"
set theFolder to POSIX path of myFolder

do shell script "find " & theFolder & " \\( -name \\*.txt -o -name \\*.xyz \\) -print0 | xargs -0 perl -i -pe '" & CleanFiles & "'"

No hay ningún mensaje de error, parece que se ejecuta pero no hace nada.

¿Qué puede ir mal?

0 votos

Bueno, lo obvio: se nombra la variable CleanFiles en la primera línea, pero utilice CleanElanFiles en la última línea. ¿es ése el problema o sólo un error de transcripción?

0 votos

@TedWrigley ooops, lo siento no que era un error tipográfico - la cosa real es mucho más complejo, pero lo he desnudado como un ejemplo mínimo aquí

0 votos

Ah. Ok, entonces creo que tu problema es que debes citar la línea de la ruta de la carpeta. cambia la línea 3 para que diga set theFolder to quoted form of (POSIX path of myFolder) . Cuando hago eso en mi carpeta de prueba tu script parece funcionar.

1voto

Ted Wrigley Puntos 101

El problema es que hay que citar las rutas de los archivos para unix, utilizando el comando quoted form of en AppleScript. En otras palabras, la línea tres debería decir:

set theFolder to quoted form of (POSIX path of myFolder)

El problema se produce porque las variables de Mac pueden contener legalmente caracteres especiales -como espacios y comillas simples- que el sistema unix utiliza. Así, si eligiera una carpeta llamada "Mi carpeta de pruebas", AppleScript devolvería su ruta posix como /Users/username/My Test Folder pero la línea de comandos invocada por do shell script lo interpretaría como tres argumentos distintos, no como una única ruta de archivo. La dirección quoted form of entrecomilla y escapa cualquier carácter especial unix en la línea de texto para que no sean interpretados como caracteres especiales por el shell.

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