1 votos

Script de Shell fallando en Automator pero funciona si lo copio/pego en Terminal

Flujo de trabajo que estoy tratando de lograr:

  1. Exportar archivo SVG desde Adobe Illustrator al Escritorio
  2. Arrastrar archivo SVG desde el Escritorio al Droplet de Automator
  3. Automator ejecuta un script (resumen básico a continuación)
  4. El script se ejecuta y me deja con un ICO

Mi script es:

ROOT=~/Desktop/
TRASH=~/.Trash/
INK=/Applications/Inkscape.app/Contents/Resources/bin/inkscape

$INK --export-png $ROOTtest_256.png -w 256 -h 256 $1
$INK --export-png $ROOTtest_128.png -w 128 -h 128 $1
$INK --export-png $ROOTtest_064.png -w 064 -h 064 $1
$INK --export-png $ROOTtest_048.png -w 048 -h 048 $1
$INK --export-png $ROOTtest_040.png -w 040 -h 040 $1
$INK --export-png $ROOTtest_032.png -w 032 -h 032 $1
$INK --export-png $ROOTtest_024.png -w 024 -h 024 $1
$INK --export-png $ROOTtest_016.png -w 016 -h 016 $1
convert $ROOTtest_*.png $ROOTTEST.ico
cp $ROOTtest_*.png $1 $TRASH

Resumen del script:

  1. Tomar el SVG (de arrastrar y soltar) y exportar múltiples PNGs en tamaños especificados
  2. Tomar múltiples PNGs y fusionarlos en un ICO
  3. Enviar el SVG original y los PNGs a la Papelera

Errores / Problemas:

  • Cuando pruebo ejecutar el script en Automator recibo este error: -: línea 12: convert: comando no encontrado. Sin embargo, puedo pegar convert ~/Desktop/test_*.png ~/Desktop/Test.ico en Terminal y todo funcionará bien. ¿Alguna idea de por qué Automator no parece poder encontrar este comando?
  • Aunque la línea 12 puede que no esté funcionando correctamente, aún esperaría que todas las líneas anteriores funcionen, sin embargo no veo señales de que estén funcionando. Al arrastrar un SVG al Droplet de Automator esperaría ver 8 PNGs en mi Escritorio pero no aparece nada. Incluso después de eliminar la última línea que mueve los PNGs y el SVG original a la papelera, nada aparece en mi escritorio.

¡Cualquier ayuda será GRANDEMENTE apreciada!

0 votos

¿Dónde está convertir (se supone que has configurado la ruta solo en los archivos de inicio de bash)?

2 votos

Intenta incluir la ruta completa a 'convert' en tu comando (como sugirió Jonathan).

0 votos

@Mark Creo que 'convert' viene con ImageMagick, que se encuentra en /Usuarios/*MI NOMBRE DE USUARIO*/ImageMagick-6.9.0-3

1voto

Yasmine Mustafa Puntos 21

Probablemente hayas personalizado la variable de entorno del camino de búsqueda de comandos PATH para localizar convert porque no está instalado en una ubicación estándar de OS X.

Cuando la acción de script de shell de Automator ejecuta un script, utiliza un shell no interactivo, lo que significa que no ejecuta archivos como ~/.bashrc o ~/.bash_profile. Esto significa que utiliza el entorno y el camino de búsqueda de comandos predeterminados.

Además, es una buena práctica que los scripts de shell utilicen rutas absolutas para los ejecutables de comando para que el script siempre ejecute el que tenías en mente, en lugar de depender del camino de búsqueda, que está principalmente diseñado para ser una conveniencia para el uso interactivo del shell. Para descubrir la ruta absoluta del comando convert, ejecuta which convert en un shell.

0 votos

Esta debería ser la respuesta aceptada. Casi le di un voto negativo porque en un momento pensé que estabas sugiriendo usar which convert en el script de la terminal en lugar de simplemente en la terminal. Eso me confundió por un segundo, porque al principio mi cerebro no lo interpretó correctamente.

1 votos

@rubynorails: He actualizado la redacción.

0voto

rubynorails Puntos 466

@Chris Page ofreció una respuesta perfectamente aceptable, porque aborda todos tus problemas necesarios, pero luego eché un segundo vistazo a tu código y me pregunté por qué no usar una función con un bucle en lugar de todos esos comandos de variables?

ink() {
  square_dimension="$2"
  infile="$1"
  /Applications/Inkscape.app/Contents/Resources/bin/inkscape --export-png "${root}/test_${square_dimension}.png" -w ${square_dimension} -h ${square_dimension} "$infile"
}

for i in {256,128,64,48,40,32,24,16}; do ink "$1" "$i"; done

Toma en cuenta que el código anterior no ha sido probado, y no es tu script completo, solo es un fragmento que reemplazará la mayoría de tu código. Lo actualizaré después de haber tenido la oportunidad de probarlo, pero se ve bien para mí. Es posible que necesites exportar la función o algo (export -f ink) o jugar con las variables de argumento, pero como dije, publicaré una actualización después de haber tenido la oportunidad de probarlo.

También, como dije antes, @Chris Page ofreció una respuesta que prácticamente responde tu pregunta. Esta es simplemente información adicional que está mejor formateada como respuesta en lugar de múltiples comentarios.

También, es una buena práctica siempre usar nombres de variables en minúsculas en scripts de shell para no sobrescribir ninguna de las variables de entorno integrada (algo con lo que he luchado, porque las variables son mucho más fáciles de reconocer, especialmente en un script grande en un sistema sin un terminal con color para resaltado de sintaxis).

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