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

如何解决从Ant调用Ruby时不允许将`$('作为全局变量名'

  •  0
  • Mig82  · 技术社区  · 5 年前

    我在努力适应 instructions from the Homebrew website 并运行与此等效的:

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

    …从一个Ant构建文件。这里是:

    <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 有问题吗?有可能以某种方式逃离 $ 签字? 简而言之,我如何调整这个Ant构建文件来安装自制程序?我可以将Homebrew安装命令放在bash脚本中,但我更愿意直接从Ant修复语法。

    0 回复  |  直到 5 年前
        1
  •  1
  •   CAustin    5 年前

    蚂蚁的 exec 任务经常被复杂的命令行操作阻塞。总的来说,最好坚持多重 执行官 步骤,包含一系列 arg value s而不是满的 arg line s。

    请改为:

    <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>
    

    在这里,远程安装脚本首先是curl'd,并使用 执行官 outputproperty 属性,然后作为参数传递给ruby。

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