如何解决从 Ant 调用 Ruby 时不允许将"$("作为全局变量名的问题



我需要在远程Mac盒上安装自制型号,并且由于某些设计决策,我可以在该机器中运行任何内容的唯一方法是执行ANT脚本。

我正在尝试调整Homebrew网站上的说明,并运行相当于:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

...来自蚂蚁构建文件。在这里是:

<project name="default" default="homebrew">
    <target name="ruby" >
        <echo message="Checking Ruby..." />
        <exec executable="/usr/bin/ruby">
            <arg value="--version"/>
        </exec>
        <echo message="Checking Ruby done!" />
    </target>
    <target name="homebrew" depends="ruby">
        <echo message="Installing Homebrew..." />
        <exec executable="/usr/bin/ruby">
            <arg line=' -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"'/>
        </exec>
        <echo message="Homebrew installation done!" />
    </target>
</project>

这是我得到的:

ruby:
     [echo] Checking Ruby...
     [exec] ruby 2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin16]
     [echo] Checking Ruby done!
homebrew:
     [echo] Installing Homebrew...
     [exec] -e:1: `$(' is not allowed as a global variable name
     [exec] Result: 1
     [echo] Homebrew installation done!

如何解决这个$(' is not allowed as a global variable name问题?有可能以某种方式逃脱$符号吗?简而言之,我该如何调整此蚂蚁构建文件以安装自制酿造剂?我可以将Homebrew Antotiontration命令放在BASH脚本中,但我宁愿将语法直接修复。

ant的exec任务通常会在复杂的命令行操作上窒息。通常,最好坚持多个exec步骤,其中包含一系列单独的arg value S,而不是完整的arg lines。

而是尝试一下:

<target name="ruby">
    <echo message="Checking Ruby..." />
    <exec executable="/usr/bin/ruby">
        <arg value="--version"/>
    </exec>
    <echo message="Checking Ruby done!" />
</target>
<target name="homebrew" depends="ruby">
    <echo message="Installing Homebrew..." />
    <exec executable="curl" outputproperty="homebrew.install">
        <arg value="-fsSL" />
        <arg value="https://raw.githubusercontent.com/Homebrew/install/master/install" />
    </exec>
    <exec executable="/usr/bin/ruby" failonerror="true">
        <arg value="-e"/>
        <arg value="${homebrew.install}"/>
    </exec>
    <echo message="Homebrew installation done!" />
</target>

这里首先使用 execoutputproperty属性将远程安装脚本存储为ant属性,然后作为参数传递给ruby。

(注意我还将failonerror="true"添加到安装步骤中,但这只是我的用例假设。如果需要,可以将其删除。(

最新更新