Flujo de trabajo que estoy tratando de lograr:
Mi guion 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 guión:
Errores / Problemas:
-: line 12: convert: command not found
. Sin embargo, puedo pegar convert ~/Desktop/test_*.png ~/Desktop/Test.ico
en la Terminal y todo funcionará bien. ¿Alguna idea de por qué Automator parece no poder encontrar este comando?¡Cualquier ayuda será apreciada!
Probablemente haya personalizado la variable de entorno de ruta de búsqueda de comandos PATH
para localizar convert
porque no está instalada en una ubicación OS X estándar.
Cuando la acción del 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 predeterminado y la ruta de búsqueda de comandos predeterminada.
Además, es una buena práctica que los scripts de shell usen rutas absolutas para los ejecutables de comandos, de modo que el script siempre ejecute el que usted pretendía, en lugar de depender de la ruta de búsqueda, que principalmente pretende ser una conveniencia para el uso interactivo del caparazón. Para descubrir la ruta absoluta al convert
comando, ejecútelo which convert
en un shell.
which convert
en el script de shell , en lugar de simplemente el shell. Eso me hizo dar un vuelco por un segundo, porque mi cerebro no lo interpretó correctamente al principio.@Chris Page ofreció una respuesta perfectamente aceptable, porque aborda todos sus problemas necesarios, pero luego eché un segundo vistazo a su código y me pregunté por qué no usar una función con un bucle en lugar de todos esos comandos 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
Tenga en cuenta que el código anterior no ha sido probado y no es su secuencia de comandos completa, solo un fragmento que reemplazará la mayor parte de su código. Actualizaré después de haber tenido la oportunidad de probarlo, pero me parece bien. Es posible que deba exportar la función o algo así ( 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.
Además, como dije antes, @Chris Page ofreció una respuesta que prácticamente responde a su pregunta. Esta es simplemente información adicional que está mejor formateada como una respuesta en lugar de múltiples comentarios.
Además, es una buena práctica usar siempre nombres de variables en minúsculas en los scripts de shell para no sobrescribir ninguna de las variables de entorno integradas (que es algo con lo que he tenido problemas, porque las variables son mucho más fáciles de reconocer, especialmente en una secuencia de comandos grande en un sistema sin una terminal de color para resaltar la sintaxis).
mmmmmm
Conducción
jonathan
jonathan
usuario3439894
jonathan
Kent
Página de Chris
INK
a una ruta conocida sin espacios, todos sus usos~
pueden expandirse a una ruta que contenga espacios.