我可以运行下面的终端命令:
security cms -D -i ../MyMobileProvision.mobileprovision > provision.plist
但是,当我在Ant中从完全相同目录下的Ant脚本运行它时,终端声称配置文件不存在,并为配置创建了一个空文件。Plist,这打乱了我下一步的进程。ant代码如下所示:
<exec executable="security">
<arg line="cms -D -i ../MyMobileProvision.mobileprovision > provision.plist" />
</exec>
我是不是错过了蚂蚁是如何工作的?我不是构建脚本的专家,但我可以使用…/语法导入属性文件很好,所以我很困惑为什么相对路径不能用于终端命令,否则它会工作得很好。
在您的终端命令示例中,代码片段…
> provision.plist
…被shell解释为重定向命令。
Ant的<exec>
任务不使用shell来执行命令。相反,> provision.plist
不加修改地传递给security
程序。
要得到您想要的,使用<exec>
的output
属性。output
是<exec>
写入输出的文件名:
<exec executable="security" output="provision.plist">
<arg value="cms" />
<arg value="-D" />
<arg value="-i" />
<arg value="../MyMobileProvision.mobileprovision" />
</exec>
在上面的例子中,我用几个<arg value="...">
元素替换了<arg line="...">
。Ant文档中关于命令行参数的推理:
强烈建议尽可能避免使用行版本。Ant将尝试以类似于(Unix) shell的方式拆分命令行,但在某些情况下可能会创建与您期望的非常不同的东西。