2010-08-09 6 views
3

J'ai un AppleScript complexe qui pour certaines raisons doit être exécuté comme commande de ligne simple. Mon script ressemble:Comment est-ce que je peux convertir un applescript complexe dans une commande simple de ligne pour le terminal

tell application "Finder" 
    tell disk "'myDiskName'" 
     open 
     set current view of container window to icon view 
     set toolbar visible of container window to false 
     set statusbar visible of container window to false 
     set the bounds of container window to {400, 100, 968, 421} 
     close 
     open 
     eject 
    end tell 
end tell 

j'exécuter le script en utilisant terminal par:

echo '<SCRIPT>' | osascript 

où est le script multiligne ci-dessus - et qui fonctionne tout à fait bien. Maintenant, pour être plus précis, je veux que ce script soit exécuté à l'aide d'une tâche de fourmi, comme:

<exec executable="echo"> 
    <arg line="'<SCRIPT>' | osascript" /> 
</exec> 

Depuis est multiligne, il devient en quelque sorte ignoré/pas exécuté, mais il ne jette pas une exception soit . Je vois deux solutions: soit une commande de ligne unique, ce qui est préférable, soit une application autonome qui est appelée. Voici la chose: le script ci-dessus a besoin de certaines variables dynamiques, qui doivent être générées à partir de l'antscript à l'exécution - donc la création du script à la volée pourrait ne pas être une option.

Répondre

6

Si l'AppleScript doit être directement intégré dans le script de génération Ant, la solution la plus lisible consiste à placer le script dans une section CDATA.

Vous pouvez alors définir une macro Ant qui transmet les données de script à la tâche exec via son paramètre inputstring:

<project name="AppleScript" default="applescript"> 

    <macrodef name="applescript"> 
     <text name="text.script" trim="false" optional="false" /> 
     <sequential> 
      <exec executable="/usr/bin/osascript" inputstring="@{text.script}" /> 
     </sequential> 
    </macrodef> 

    <target name="applescript"> 
     <applescript> 
      <![CDATA[ 
tell application "Finder" 
    open startup disk 
end tell 
      ]]> 
     </applescript> 
    </target> 

</project> 
+0

J'aime beaucoup cette réponse. C'est facile, réutilisable et sémantiquement très agréable. Merci. – gamma

7

Je ne suis pas sûr de ce que d'une « fourmi-tâche » est mais de créer un faire en une ligne de cette façon ...

/usr/bin/osascript -e "tell application \"Finder\"" -e "tell disk \"'myDiskName'\"" -e "open" -e... 

En d'autres termes, chaque ligne obtient un « -e » en face de lui et vous voulez la ligne citée.

+0

J'ai essayé, mais il a échoué et était totalement illisible. – gamma

+0

A travaillé pour moi. Notez que la citation s'échappe peut ne pas fonctionner pour certains shells (comme csh). – Kelvin

+0

Fonctionne bien. @ Gamma, quel était le problème? – pje

Questions connexes