Automator no ejecutará mi script de shell bash

1

Tengo un script de bash que funciona como un hilo. Ahora me gustaría convertirlo en un servicio con Automator.

La entrada se establece en Archivos de imagen en Automator y la acción del script de shell se establece en Pass input as arguments .

El problema:

Automator tiene problemas con dos cosas:

  1. La función
  2. La condición if

Sin embargo, no aparece ningún error en el registro y el resultado del script de shell está vacío:

(
  ""
)

Lo que hace el script:

La función createDatePath comprueba si la imagen pasada tiene el formato 2020-08-10-demo_image.jpg y crea una carpeta YEAR/MONTH/ en el directorio de destino. La condición si realiza acciones en la entrada dependiendo de si es un JPEG o un PNG, y si la cadena de fecha va seguida de una cadena -qq- . Esta es una versión recortada del script (tengo algunas más si las condiciones, pero supongo que no las necesitamos aquí).

El script:

backup=/Users/me/Desktop/A/backup/
targetPath=/Users/me/Desktop/A/output/

function createDatePath {
    [[ "$i" =~ ^([0-9]{4})-([0-9]{2}) ]] && \
    mkdir -p "$targetPath${BASH_REMATCH[1]}/${BASH_REMATCH[2]}";
}
for i in "$@"; do
    cp "$i" "$backup"
    if [[ "$i" =~ ^([0-9]{4})-([0-9]{2})-([0-9]{2})-([^q]{2}).+\.((jpg)|(jpeg))$ ]]; then
        createDatePath;
    else
        exit 0;
    fi
done

Captura de pantalla:

Enlaceparacompletarelscriptdeshell: enlace

Si alguien pudiera explicarme por qué esto no funciona y cómo hacerlo funcionar, sería genial.

PS: En el script no Automator, lo primero que hice fue cd en la ruta de origen, pero como esto terminará como un servicio que toma los archivos como entrada, creo que puedo omitir esto (agregar cd "$@" no fue bueno).

    
pregunta pattulus 13.08.2013 - 08:42

1 respuesta

3

Los argumentos que Automator pasa al script son rutas absolutas. Puedes convertirlos en nombres de base con algo como i=${i##*/} .

    
respondido por el user495470 13.08.2013 - 12:19

Lea otras preguntas en las etiquetas