Automator non eseguirà il mio script di shell bash

1

Ho uno script bash che funziona come un thread. Ora mi piacerebbe trasformarlo in un servizio con Automator.

Input è impostato su File immagine in Automator e l'azione dello script della shell è impostata su Pass input as arguments .

Il problema:

Automator ha due problemi:

  1. La funzione
  2. La condizione if

Tuttavia, nessun errore compare nel log e il risultato dello script della shell è vuoto:

(
  ""
)

Cosa fa lo script:

La funzione createDatePath controlla se l'immagine passata è stata formattata come 2020-08-10-demo_image.jpg e crea una cartella YEAR/MONTH/ nella directory di destinazione. La condizione se esegue azioni sull'input a seconda che si tratti di un JPEG o di un PNG e se la stringa di data è seguita da una stringa -qq- . Questa è una versione ridotta dello script (ne ho alcune di più se le condizioni, ma non ne abbiamo bisogno qui, credo).

Lo 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

Schermata:

Linkpercompletareloscriptdellashell: link

Se qualcuno potesse spiegarmi perché questo non funziona e come farlo funzionare sarebbe fantastico.

PS: nello script non-Automator la prima cosa che ho fatto è stata cd nel percorso di origine, ma dal momento che questo finirà come un servizio che prende i file come input, la mia ipotesi è che posso omettere questo (l'aggiunta di cd "$@" non ha funzionato)

    
posta pattulus 13.08.2013 - 08:42
fonte

1 risposta

3

Gli argomenti che Automator passa allo script sono percorsi assoluti. Puoi convertirli in nomi base con qualcosa come i=${i##*/} .

    
risposta data 13.08.2013 - 12:19
fonte

Leggi altre domande sui tag