Problema con Automator e script bash

0

Sto facendo un servizio di automa, e la prima parte prende i file e li fa in RAR usando uno script bash

Quindi in Automator, ho un'azione Get Finder Finder Item specificata per testare il flusso di lavoro e quindi lo script bash

F=''
for i in "$@"; do 
    F="$F \"${i//\"/\\"}\""
done

/usr/local/bin/rar a ~/archive.rar $F

quindi prende solo i percorsi dei file, inserisce le virgolette attorno a loro e quindi esegue il comando RAR con tutti i file come argomenti. Quando eseguo questo, automator mi dà l'errore

Cannot open "/Users/user/test.txt" No such file or directory

Cannot create ~/archive.rar No such file or directory

Non capisco perché stia ottenendo quegli errori. Quando aggiungo un eco all'ultimo comando

echo /usr/local/bin/rar a ~/archive.rar $F

I risultati sono esattamente il comando di cui ho bisogno. Posso copiarlo e incollarlo nel terminale e funziona.

L'automatore esegue gli script di bash in modo diverso da come verrebbero eseguiti nel terminale?

    
posta user3321819 12.01.2016 - 05:35
fonte

2 risposte

1

bash esegue l'espansione di $@ diversa da tutte le altre variabili di ambiente per preservare lo spazio bianco ecc. negli argomenti. Da bash(1) :

@ Expands  to  the  positional  parameters,  starting from one.  When the expansion occurs
  within double quotes, each parameter expands to a  separate  word.   That  is,  "$@"  is
  equivalent  to  "$1"  "$2" ...  If the double-quoted expansion occurs within a word, the
  expansion of the first parameter is joined with the beginning part of the original word,
  and  the  expansion  of  the last parameter is joined with the last part of the original
  word.  When there are no positional parameters, "$@" and $@  expand  to  nothing  (i.e.,
  they are removed).

Quindi, in pratica, dovresti riuscire a chiamare rar all'interno dell'azione Shell Script senza alcuna analisi:

/usr/local/bin/rar a ~/archive.rar "$@"
    
risposta data 13.01.2016 - 19:16
fonte
-1

Strane quotazioni automatiche che vanno dietro le quinte che non riuscivo a capire. Così ho fatto questo work-around per fargli fare ciò che volevo, anche se non esattamente una soluzione:

echo /usr/local/bin/rar a ~/archive.rar $F | bash
    
risposta data 12.01.2016 - 18:26
fonte

Leggi altre domande sui tag