Automator no ejecutará mi script bash shell

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

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

El problema:

Automator tiene problemas con dos cosas:

  1. La function
  2. La condición if

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

 ( "" ) 

Lo que hace el script:

La function createDatePath comtesting si la image pasada tiene el formatting 2020-08-10-demo_image.jpg y crea una carpeta YEAR/MONTH/ en el directory de destino. La condición if realiza acciones en la input dependiendo de si es un JPEG o un PNG, y si la cadena de date es seguida por una cadena -qq- . Esta es una versión recortada del guión (tengo algunas más condiciones si, pero no las necesitamos aquí, supongo).

La secuencia de commands:

 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 hacerlo funcionar, sería genial.

PD: En el script que no es de Automator, lo primero que hice fue cd en la ruta fuente, pero como esto terminará como un service que toma files como input, creo que puedo omitir esto (agregando cd "$@" no hizo ningún bien).

Loving Apple Products like poisoning (iPhone, iPad, iMac, Macbook, iWatch).