Applescript "previsto ma trovato identificativo"

0

Al momento, ho uno script bash molto semplice che chiama osascript -e un sacco di volte; sembra come questo (newlines aggiunti per la leggibilità):

#!/bin/sh
osascript \
  -e 'tell application "Terminal" to activate' \
\
  -e 'set allWindows to number of windows' \
  -e 'set newTab to true' \
\
  -e 'repeat with i from 1 to allWindows' \
  -e '  set allTabs to number of tabs of window i' \
  -e '  repeat with j from 1 to allTabs' \
  -e '    if custom title of tab j of window i contains "Hi" then' \
  -e '      set frontmost of window i to true' \
  -e '      set selected of tab j of window i to true' \
  -e '      set newTab to false' \
  -e '    end if' \
  -e '  end repeat' \
  -e 'end repeat' \
\
  -e 'if newTab then' \
  -e '  tell application "System Events" to tell process "Terminal" to keystroke "t" using command down' \
  -e '  tell application "Terminal"' \
  -e '    do script ("tabname $2") in selected tab of the front window' \
  -e '    set custom title of selected tab of the front window to "$2"' \
  -e '  end tell' \
  -e 'end if' \
\
  -e 'tell application "Terminal" to do script ("$1") in selected tab of the front window'

L'idea alla base di questo è di lasciarmi chiamare qualcosa come ~/term.sh pwd Hi per aprire una nuova scheda del terminale con il titolo "Ciao" e chiamare pwd al suo interno.

L'unico problema è che si sbaglia con 222:227: syntax error: Expected “then”, etc. but found identifier. (-2741) . Suppongo che questo significhi che a if manca un then , ma non è possibile vederne uno. L'altro pensiero che ho avuto è che 222: 227 indica colonne, ma di nuovo non vedo come quelle colonne del comando siano sbagliate.

C'è qualcuno che può indicarmi la direzione giusta qui per favore?

    
posta Joe 24.07.2015 - 10:50
fonte

2 risposte

3

Prima di provare a eseguire uno script non banale utilizzando osascript , prova innanzitutto a compilarlo (e a eseguirlo, se possibile) in Script Editor.

Quando ho compilato il tuo script in Script Editor, è emerso che il tuo script sta cercando di usare il termine custom title -a termine specifico del terminale, senza il terminale di destinazione, quindi il termine non è disponibile. Estendi la tua prima riga, tell … to … , in un blocco tell :

tell application "Terminal Latest"
    activate

    set allWindows to number of windows
    set newTab to true

    repeat with i from 1 to allWindows
        set allTabs to number of tabs of window i
        repeat with j from 1 to allTabs
            if custom title of tab j of window i contains "Hi" then
                set frontmost of window i to true
                set selected of tab j of window i to true
                set newTab to false
            end if
        end repeat
    end repeat
end tell

if newTab then
    tell application "System Events" to tell process "Terminal" to keystroke "t" using command down
    tell application "Terminal Latest"
        do script ("tabname $2") in selected tab of the front window
        set custom title of selected tab of the front window to "$2"
    end tell
end if

tell application "Terminal Latest" to do script ("$1") in selected tab of the front window

Ma scoprirai che questo codice continua a non funzionare, perché stai cercando di utilizzare le variabili di shell $1 e $2 all'interno di stringhe con quotatura singola, in cui la shell non le interpreterà. Pertanto, dovrai anche suddividere il quoting di tali righe, ad es. Nella modifica degli argomenti del comando osascript

-e 'do script ("tabname $2") in selected tab of the front window'

a

-e 'do script "tabname '"$2"'" in selected tab of the front window'

[testato.]

Inoltre, le parentesi non erano necessarie.

Tuttavia, se lo stai memorizzando in un file di script shebang, non devi usare una shell per eseguire osascript . Puoi cambiare la prima riga in

#!/usr/bin/osascript

e poi inserisci il tuo codice AppleScript, senza le opzioni -e , che racchiudono le barre rovesciate di quotatura singola o di continuazione della linea.

Infine, poiché AppleScript supporta il carattere di commento hash # , puoi modificare, compilare ed eseguire (come appropriato) osascript script di shebang in Script Editor.

Aggiornamento: Un minuto dopo mi sono reso conto che vuoi passare gli argomenti della riga di comando allo script. Quindi, vuoi usare una shell per eseguire osascript per il tuo caso. Tuttavia, puoi semplificare le cose utilizzando un documento qui per posizionare lo script in linea:

osascript<<EOF
    <your script here>
EOF

Le variabili / argomenti saranno espansi.

    
risposta data 06.08.2015 - 07:41
fonte
0

Questo potrebbe aiutarti con un paio di metodi per superare il tuo problema. Credo: link

    
risposta data 25.07.2015 - 19:58
fonte

Leggi altre domande sui tag