Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 如何将复杂的applescript转换为终端的单行命令_Shell_Ant_Applescript - Fatal编程技术网

Shell 如何将复杂的applescript转换为终端的单行命令

Shell 如何将复杂的applescript转换为终端的单行命令,shell,ant,applescript,Shell,Ant,Applescript,我有一个复杂的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 statusb

我有一个复杂的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
echo'|脚本
其中,是上面的多行脚本-这绝对可以正常工作。现在,更具体地说,我希望使用ant任务运行此脚本,如:

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

因为是多行的,所以它会被忽略/不执行,但也不会引发异常。我看到了两种解决方案:一种是单行命令,这是更好的选择,另一种是独立的applescipt,可以调用它。事情是这样的:上面的脚本需要一些动态变量,这些变量必须在运行时从antscript生成-因此动态创建脚本可能不是一个选项。

我不确定“ant任务”是什么,但要创建一个单行程序,请这样做

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

换句话说,每一行前面都有一个“-e”,您需要引用该行。

如果AppleScript应该直接嵌入到Ant构建脚本中,最可读的解决方案是将脚本包装到一个节中

然后,您可以定义一个Ant宏,该宏通过其
inputstring
参数将脚本数据传递给
exec
任务:

<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>


我非常喜欢这个答案。它简单、可重用,而且语义非常好。谢谢,为我工作。请注意,引号转义可能不适用于某些shell(如csh)。可以正常工作@gamma,问题出在哪里?@pje我想它在某些用例中很方便。我想当我在2010年测试它时,我犯了一些错误。然而,我仍然认为它完全不可读。从那以后,被接受的解决方案就发挥了巨大的作用。