【问题标题】:Terminal command works, but not when I run it in Ant终端命令有效,但在 Ant 中运行时无效
【发布时间】:2017-01-15 06:43:27
【问题描述】:

我可以很好地运行以下终端命令:

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>

我是否遗漏了一些关于 ant 工作原理的信息?我不是构建脚本方面的专家,但我可以使用 ../ 语法很好地导入属性文件,所以我很困惑为什么相对路径不适用于终端命令,否则它可以正常工作。

【问题讨论】:

    标签: ant exec provisioning-profile


    【解决方案1】:

    在您的终端命令示例中,sn-p...

    > provision.plist
    

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

    Ant 的&lt;exec&gt; 任务不使用shell 来执行命令。相反,&gt; provision.plist 未经修改地传递给 security 程序。

    要获得您想要的,请使用&lt;exec&gt; 的output 属性。 output 是 &lt;exec&gt; 将写入输出的文件的名称:

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

    在上面的例子中,我用几个&lt;arg value="..."&gt; 元素替换了&lt;arg line="..."&gt;。推理来自Ant documentation on Command-line Arguments:

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

    【讨论】:

    • 效果很好!谢谢!很难从 ant 文档中找出类似的东西。展望未来,我会将各个参数放在他们自己的标签中。
    • @Sly_Boots 我很高兴我的回答有所帮助。请接受这个答案。
    猜你喜欢
    • 1970-01-01
    • 2021-09-25
    • 2021-07-18
    • 2019-05-07
    • 2021-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多