Как я могу преобразовать сложный яблочный скрипт в однострочную команду для терминала - PullRequest
3 голосов
/ 09 августа 2010

У меня есть сложный AppleScript, который по некоторым причинам должен выполняться как однострочная команда.Мой сценарий выглядит следующим образом:

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

Я выполняю сценарий с помощью терминала следующим образом:

echo '<SCRIPT>' | osascript

, где указан многострочный сценарий выше - и это работает абсолютно нормально.Теперь, чтобы быть более конкретным, я хочу, чтобы этот сценарий запускался с использованием ant-задачи, например:

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

Так как он является многострочным, он каким-то образом игнорируется / не выполняется, но не выдаетисключение тоже.Я вижу два решения: либо однострочная команда, которая предпочтительнее, либо автономный applecipt, который вызывается.Вот в чем дело: приведенному выше сценарию требуются некоторые динамические переменные, которые должны генерироваться из antscript во время выполнения, поэтому создание сценария на лету может оказаться невозможным.

Ответы [ 2 ]

7 голосов
/ 09 августа 2010

Я не уверен, что такое "задача муравья", но чтобы создать однострочную строку, сделайте это так ...

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

Другими словами, каждая строка получает "-e""перед ним, и вы хотите, чтобы строка была в кавычках.

6 голосов
/ 09 августа 2010

Если AppleScript должен быть встроен непосредственно в скрипт сборки Ant, наиболее читаемое решение - заключить скрипт в раздел CDATA .

Затем можно определить макрос Ant, которыйпередает данные сценария в задачу exec через параметр 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...