Applescript "se esperaba, pero se encontró el identificador"

0

Actualmente, tengo un script bash muy simple que llama a osascript -e un montón de veces; se ve así (nuevas líneas agregadas para facilitar la lectura):

#!/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'

La idea detrás de esto es dejarme llamar algo como ~/term.sh pwd Hi para abrir una nueva pestaña de terminal con el título "Hola" y llamar a pwd dentro de ella.

El único problema es que se produce un error con 222:227: syntax error: Expected “then”, etc. but found identifier. (-2741) . Supongo que esto significa que a if le falta un then , pero no puede ver ninguno de ellos. El otro pensamiento que tuve es que 222: 227 indica columnas, pero una vez más no veo cómo esas columnas del comando son incorrectas.

¿Hay alguien que pueda indicarme la dirección correcta aquí, por favor?

    
pregunta Joe 24.07.2015 - 10:50

2 respuestas

3

Antes de intentar ejecutar un script no trivial usando osascript , primero intente compilarlo (y ejecutarlo, si es posible) en el Editor de scripts.

Cuando compilé su secuencia de comandos en el Editor de secuencias de comandos, reveló que su secuencia de comandos está tratando de usar el término custom title , un término específico de la Terminal, sin apuntar a la Terminal, por lo que el término no está disponible. Extienda su primera línea, tell … to … , a un bloque 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

Pero encontrará que este código aún no funciona, porque está tratando de usar las variables de shell $1 y $2 dentro de cadenas de comillas simples, donde el shell no las interpretará. Por lo tanto, también deberá dividir la cita de esas líneas, por ejemplo, en el cambio de los argumentos de 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'

[Sin probar.]

Además, los paréntesis eran innecesarios.

Sin embargo, si está almacenando esto en un archivo de script shebang, no necesita usar un shell para ejecutar osascript . Puedes cambiar la primera línea a

#!/usr/bin/osascript

y luego coloque su código AppleScript después de eso, sin las opciones -e , rodeando las comillas invertidas de comillas simples o de continuación de línea.

Finalmente, dado que AppleScript admite el carácter de comentario hash # , puede editar, compilar y ejecutar (según corresponda) osascript shebang scripts en el Editor de scripts.

Actualizar: Un minuto después, me di cuenta de que desea pasar argumentos de línea de comandos al script. Por lo tanto, desea utilizar un shell para ejecutar osascript para su caso. Sin embargo, puede simplificar las cosas utilizando un documento aquí para colocar el script en línea:

osascript<<EOF
    <your script here>
EOF

Se expandirán las variables / argumentos.

    
respondido por el Chris Page 06.08.2015 - 07:41
0

Esto podría ayudarte con un par de métodos para superar tu problema, creo: enlace

    
respondido por el Israel Roth 25.07.2015 - 19:58

Lea otras preguntas en las etiquetas