Automator no ejecutará mi script bash shell

Tengo un script 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 discrepa con dos cosas:

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

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

(
  ""
)

Qué hace el guión:

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

La secuencia de comandos:

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:

Modo de demostración

Enlace para completar el script de shell: https://gist.github.com/pattulus/a89be63478174853d667

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

PD: en el script que no es de Automator, lo primero que hice fue cdingresar a la ruta de origen, pero como esto terminará como un servicio que toma archivos como entrada, supongo que puedo omitir esto (agregar no sirvió de cd "$@"nada ).

¿Puede agregar una captura de pantalla del flujo de trabajo de Automator (o un enlace a una captura de pantalla al menos)?
@patrix Agregué una captura de pantalla y un enlace a una Gist del guión completo. Cuando esto funcione, eliminaré la acción "Obtener selección del Finder" y configuraré la entrada para recibir imágenes.

Respuestas (1)

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

Realmente te mereces mi insignia de honor hecha a mano por estar en el lugar correcto en el momento correcto.