代码之家  ›  专栏  ›  技术社区  ›  gamma

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

  •  3
  • gamma  · 技术社区  · 15 年前

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

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

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

    2 回复  |  直到 11 年前
        1
  •  6
  •   sakra    15 年前

    如果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>
    
        2
  •  7
  •   regulus6633    15 年前

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

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

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