Lo script di shell non funziona in Automator ma funziona se copio / incolli nel terminale

1

Flusso di lavoro che sto cercando di raggiungere:

  1. Esporta file SVG da Adobe Illustrator sul desktop
  2. Trascina il file SVG dal desktop in Droplet di automazione
  3. Automator esegue script (riepilogo di base di seguito)
  4. Lo script viene eseguito e mi lascia su ICO

Il mio script è:

ROOT=~/Desktop/
TRASH=~/.Trash/
INK=/Applications/Inkscape.app/Contents/Resources/bin/inkscape

$INK --export-png $ROOTtest_256.png -w 256 -h 256 $1
$INK --export-png $ROOTtest_128.png -w 128 -h 128 $1
$INK --export-png $ROOTtest_064.png -w 064 -h 064 $1
$INK --export-png $ROOTtest_048.png -w 048 -h 048 $1
$INK --export-png $ROOTtest_040.png -w 040 -h 040 $1
$INK --export-png $ROOTtest_032.png -w 032 -h 032 $1
$INK --export-png $ROOTtest_024.png -w 024 -h 024 $1
$INK --export-png $ROOTtest_016.png -w 016 -h 016 $1
convert $ROOTtest_*.png $ROOTTEST.ico
cp $ROOTtest_*.png $1 $TRASH

Riepilogo dello script:

  1. Scatta SVG (trascina e rilascia) e esporta più file PNG alle dimensioni specificate
  2. Prendi più file PNG e unisci in un unico ICO
  3. Invia SVG e PNG originali nel Cestino

Errori / Problemi:

  • Quando eseguo il test dello script in Automator, ottengo questo errore: -: line 12: convert: command not found . Tuttavia, posso incollare convert ~/Desktop/test_*.png ~/Desktop/Test.ico in Terminale e tutto funzionerà correttamente. Qualche idea sul perché Automator non riesca a trovare questo comando?
  • Anche se la riga 12 potrebbe non funzionare correttamente, mi aspetterei comunque che tutte le righe sopra funzionino, tuttavia non vedo alcun segno che funzionino. Dopo aver fatto cadere un SVG su Automator Droplet, mi aspetterei di vedere 8 PNG sul mio desktop ma non appare nulla. Anche dopo aver eliminato l'ultima riga che sposta i file PNG e SVG originali nel Cestino, non appare nulla sul mio desktop.

Qualsiasi aiuto sarà apprezzato GRAZIE!

    
posta Jonathan 19.11.2015 - 20:38
fonte

2 risposte

1

Probabilmente hai personalizzato la variabile di ambiente del percorso di ricerca dei comandi PATH per individuare convert perché non è installata in un percorso OS X standard.

Quando l'azione dello script di shell di Automator esegue uno script usa una shell non interattiva, il che significa che non esegue file come ~/.bashrc o ~/.bash_profile . Ciò significa che utilizza l'ambiente predefinito e il percorso di ricerca dei comandi predefinito.

Inoltre, per gli script di shell è consigliabile utilizzare percorsi assoluti per gli eseguibili di comandi in modo che lo script esegua sempre quello desiderato, invece di fare affidamento sul percorso di ricerca, che è principalmente inteso come una comodità per l'interazione uso della shell. Per scoprire il percorso assoluto del comando convert , esegui which convert in una shell.

    
risposta data 28.11.2015 - 14:31
fonte
0

@Chris Page ha offerto una risposta perfettamente accettabile, perché risolve tutti i tuoi problemi necessari, ma poi ho dato una seconda occhiata al tuo codice e mi sono chiesto perché non utilizzare una funzione con un ciclo anziché tutti quei comandi variabili?

ink() {
  square_dimension="$2"
  infile="$1"
  /Applications/Inkscape.app/Contents/Resources/bin/inkscape --export-png "${root}/test_${square_dimension}.png" -w ${square_dimension} -h ${square_dimension} "$infile"
}

for i in {256,128,64,48,40,32,24,16}; do ink "$1" "$i"; done

Tieni presente che il codice precedente non è stato testato e non è lo script completo, ma solo uno snippet che sostituirà la maggior parte del tuo codice. Aggiornerò dopo che ho avuto la possibilità di testarlo, ma mi sembra buono. Potrebbe essere necessario esportare la funzione o qualcosa del genere ( export -f ink ) o manipolare le variabili argomento - ma come ho detto, pubblicherò un aggiornamento dopo aver avuto la possibilità di testarlo.

Inoltre, come ho detto prima, la pagina @Chris ha offerto una risposta che risponde alla tua domanda. Si tratta semplicemente di informazioni aggiuntive che sono meglio formattate come risposta piuttosto che più commenti.

Inoltre, è meglio usare sempre nomi di variabili minuscole negli script di shell in modo da non sovrascrivere nessuna delle variabili di ambiente predefinite (che è qualcosa con cui ho avuto difficoltà, perché le variabili sono molto più facili da riconoscere - - specialmente in uno script di grandi dimensioni su un sistema senza un terminale colorato per l'evidenziazione della sintassi).

    
risposta data 28.11.2015 - 15:10
fonte

Leggi altre domande sui tag