终端命令有效,但不是在Ant中运行它

时间:2016-09-07 14:09:48

标签: ant exec provisioning-profile

我可以运行以下终端命令:

security cms -D -i ../MyMobileProvision.mobileprovision > provision.plist

但是,当我在Ant中运行它时,来自完全相同目录中的ant脚本,终端声称配置文件不存在,它为provision.plist创建一个空文件,这搞砸了下一步在我的过程中。蚂蚁代码如下所示:

        <exec executable="security">
            <arg line="cms -D -i ../MyMobileProvision.mobileprovision > provision.plist" />
        </exec>

我错过了关于蚂蚁如何运作的一些内容吗?我不是构建脚本的专家,但是我可以使用../语法来导入属性文件,所以我很困惑为什么相对路径不适用于终端命令,否则它将起作用很好。

1 个答案:

答案 0 :(得分:1)

在您的终端命令示例中,代码段...

> provision.plist

...被shell解释为重定向命令。

Ant的<exec>任务不使用shell来执行命令。相反,> provision.plist未经修改即传递给security程序。

要获得所需内容,请使用output的{​​{1}}属性。 <exec>output将写入输出的文件的名称:

<exec>

在上面的示例中,我已将<exec executable="security" output="provision.plist"> <arg value="cms" /> <arg value="-D" /> <arg value="-i" /> <arg value="../MyMobileProvision.mobileprovision" /> </exec> 替换为多个<arg line="...">元素。来自Ant documentation on Command-line Arguments

的推理
  

强烈建议尽可能避免使用行版本。 Ant将尝试以类似于(Unix)shell的方式拆分命令行,但可能会创建一些与您在某些情况下所期望的非常不同的东西。