2010-08-09 51 views
3

我有一个复杂的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 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> 

由于是多,它在某种程度上被/不执行忽略,但它并没有任何抛出异常。我看到两种解决方案:一种是单行命令,这是更可取的,或者是一个独立的applescipt被调用。这是一件事情:上面的脚本需要一些动态变量,这些变量必须在运行时从antscript生成 - 因此,动态创建脚本可能不是一种选择。

回答

6

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

然后,您可以定义一个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> 
+0

我非常喜欢这个答案。它很容易,可重用,语义非常好。谢谢。 – gamma 2010-08-09 15:12:28

7

我不知道的“蚁任务”是什么,但创造一个班轮做这种方式...

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

换句话说,每一行得到了“-e”在它的前面,你想要引用该行。

+0

我想这一点,但它失败了,是完全不可读。 – gamma 2010-08-09 15:02:46

+0

为我工作。请注意,引号转义可能不适用于某些shell(如csh)。 – Kelvin 2011-04-28 16:22:54

+0

工作正常。 @ gamma,问题是什么? – pje 2012-11-23 20:53:19