Come passare un set di file come variabile da AppleScript a uno script di shell Bash

1

Ho un problema in due parti.

  1. Sto provando a passare una variabile da AppleScript per essere usata come variabile all'interno di uno script di shell bash. Non riesco a capire come funziona. Ho letto di concatenare la variabile e il comando do shell script con & all'interno di AppleScript. Ma questo non funziona con uno script più lungo.

Ecco il breve AppleScript per selezionare un file e (si spera) passarlo alla shell come variabile.

tell application "Finder"
    activate
    choose file
    set myFile to result as text
end tell
do shell script "/path/to/script.sh"

E poi lo script di shell stesso:

#!/bin/bash
while read lines
do
    echo ${lines##*:}
    grep "string" 
done <$myFile | awk '!x[$0]++' |\
trans -b :en # this is where the second problem occurs

Questa è una versione abbreviata della sceneggiatura attuale, ma penso che l'intento sia chiaro. Non sono sicuro di come passare la variabile myFile FROM Applescript alla shell.

  1. Il secondo problema è che il comando trans ( che è un traduttore di riga di comando piuttosto utile ) usa il comando gawk che, naturalmente, è installato insieme al programma trans stesso. Ma quando viene eseguito da Applescript ottengo il messaggio di errore:

error "/usr/local/bin/trans: line 4990: gawk: command not found" number 127

So che AppleScript ha bisogno del percorso completo perché funzioni. Ma come posso fornire il percorso completo per un comando incorporato in profondità in quasi 5000 righe di codice? Devo modificare il codice del programma trans stesso per fornire il percorso completo a gawk ?

Inoltre mi rendo conto che potrei fare tutto da dentro la shell e che molto di questo aggiunge complessità in cui nessuno è necessario. Ma penso che valga ancora la pena sapere come farlo.

Grazie per la lettura.

    
posta I0_ol 21.06.2016 - 09:41
fonte

2 risposte

1

Il primo problema può essere risolto esportando il percorso all'interno della parte script di shell :

tell application "Finder"
    activate
    choose file
    set myFile to result as text
end tell
do shell script "export MYFILE=" & quoted form of myFile & " ; /Users/user_name/bin/sh/echo_var_myfile.sh"

Nel mio esempio "echo_var_myfile.sh" è

#!/bin/bash
echo $MYFILE >> /Users/user_name/echo_var_myfile.txt

Il bit eseguibile deve essere impostato:

chmod +x /Users/user_name/bin/sh/echo_var_myfile.sh

Il risultato è il percorso del file scelto.

Non devi aggiungere un secondo script di shell per lo script della shell perché non appena viene eseguito il primo muore e non vengono esportati valori.

    
risposta data 21.06.2016 - 12:57
fonte
1

Il primo problema con il primo script è che non stai utilizzando la variabile set myFile .

Ecco una guida generale per ottenere assistenza:

Apri editor di script - usa il menu di aiuto per avviare la guida alla lingua di AppleScript e cercare il comando che hai. In questo caso, "script di shell"

Questo ti porta a: link

L'esempio mostra come impostare una variabile per un nome host e quindi chiamare ping:

set theHostName to "www.apple.com"
do shell script "ping -c1 " & theHostName

Quindi, nel tuo caso avrai bisogno di:

do shell script "/path/to/script.sh"  & myFile

A quel punto, probabilmente incorrerai in problemi di percorso, quindi l'esecuzione di piccoli frammenti di codice nell'editor, osservando il risultato e l'iterazione, dovrebbe portarti a soluzioni come inevitabili errori nel percorso, analisi e creazione di una logica. Ho lasciato un refuso nel secondo esempio di "script di shell" qui sopra - fai attenzione agli spazi e alle virgolette: -)

    
risposta data 21.06.2016 - 12:45
fonte

Leggi altre domande sui tag