0 votes

Applescript "s'attendait à ce qu'il y ait un identifiant mais l'a trouvé".

Actuellement, j'ai un bash script très simple qui appelle osascript -e plusieurs fois ; cela ressemble à ceci (les nouvelles lignes ont été ajoutées pour plus de lisibilité) :

#!/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'idée derrière tout cela est de me permettre d'appeler quelque chose comme ~/term.sh pwd Hi pour ouvrir un nouvel onglet de terminal avec le titre "Salut" et appeler pwd à l'intérieur.

Le seul problème est qu'il y a une erreur avec 222:227: syntax error: Expected “then”, etc. but found identifier. (-2741) . Je suppose que cela signifie une if Il manque un then mais je n'en vois aucun. L'autre idée que j'ai eue est que 222:227 indique des colonnes, mais là encore je ne vois pas en quoi ces colonnes de la commande sont fausses.

Quelqu'un peut-il m'indiquer la bonne direction à suivre ?

3voto

Chris Page Points 7394

Avant d'essayer d'exécuter un script non-trivial en utilisant osascript , essayez d'abord de le compiler (et de l'exécuter, si possible) dans l'éditeur script.

Lorsque j'ai compilé votre script dans script Editor, il a révélé que votre script essaie d'utiliser le terme. custom title -un terme spécifique au Terminal - sans cibler le Terminal, de sorte que le terme n'est pas disponible. Prolongez votre première ligne, tell … to … dans un tell bloc :

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

Mais vous allez vous rendre compte que ce code ne fonctionne toujours pas, parce que vous essayez d'utiliser des variables shells $1 y $2 à l'intérieur de chaînes de caractères entre guillemets, où le shell ne les interprétera pas. Vous devrez donc également interrompre la citation de ces lignes, par exemple dans votre fichier osascript modification des arguments de la commande

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

à

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

[Non testé.]

De plus, les parenthèses étaient inutiles.

Cependant, si vous stockez ceci dans un fichier shebang script, vous n'avez pas besoin d'utiliser un shell pour exécuter osascript . Vous pouvez changer la première ligne en

#!/usr/bin/osascript

et ensuite, mettez votre code AppleScript après ça, sans le -e en entourant les backslashes de citation simple ou de continuation de ligne.

Enfin, puisque AppleScript supporte le hachage # caractère de commentaire, vous pouvez modifier, compiler et exécuter (selon le cas) osascript shebang scripts dans l'éditeur scripts.

Mise à jour : Une minute plus tard, j'ai réalisé que vous voulez passer des arguments de ligne de commande au script. Donc, vous voulez utiliser un shell pour exécuter osascript pour votre affaire. Cependant, vous pouvez simplifier les choses en utilisant une Ce document pour placer le script en ligne :

osascript<<EOF
    <your script here>
EOF

Les variables/arguments seront développés.

0voto

Israel Roth Points 101

Cela pourrait vous aider à trouver quelques méthodes pour surmonter votre problème, je pense : https://stackoverflow.com/questions/6964486/osascript-syntax-error-expected-end-of-line-but-found-command-name-2741

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X