Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何解决从Ant调用Ruby时不允许将“$”(作为全局变量名)的问题_Ruby_Ant_Homebrew - Fatal编程技术网

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

如何解决从Ant调用Ruby时不允许将“$”(作为全局变量名)的问题,ruby,ant,homebrew,Ruby,Ant,Homebrew,我需要在远程Mac机上安装Homebrew,由于一些设计决策,我在该机器上运行任何东西的唯一方法是执行Ant脚本 我正在尝试调整并运行与此等效的: /usr/bin/ruby-e$curl-fsSLhttps://raw.githubusercontent.com/Homebrew/install/master/install …来自Ant构建文件。如下所示: 以下是我得到的: 红宝石: [echo]正在检查Ruby。。。 [exec]ruby 2.3.7p456 2018-03-28修订版63

我需要在远程Mac机上安装Homebrew,由于一些设计决策,我在该机器上运行任何东西的唯一方法是执行Ant脚本

我正在尝试调整并运行与此等效的:

/usr/bin/ruby-e$curl-fsSLhttps://raw.githubusercontent.com/Homebrew/install/master/install …来自Ant构建文件。如下所示:

以下是我得到的:

红宝石: [echo]正在检查Ruby。。。 [exec]ruby 2.3.7p456 2018-03-28修订版63024[universal.x86_64-darwin16] [echo]检查Ruby完成! 自制: [echo]正在安装自制软件。。。 [exec]-e:1:“$”不允许作为全局变量名 [执行]结果:1 [echo]自制软件安装完成! 我如何避免$不允许作为全局变量名的问题?是否可能以某种方式逃逸$符号? 简而言之,我如何调整这个Ant构建文件来安装Homebrew?我可以将Homebrew安装命令放在一个bash脚本中,但我更愿意直接从Ant修改语法来完成它。

Ant的exec任务经常会被复杂的命令行操作阻塞。一般来说,最好坚持多个exec步骤,其中包含一系列单独的参数值,而不是完整的参数行

请尝试以下方法:

<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>
在这里,远程安装脚本首先被卷曲并使用exec的outputproperty属性存储为Ant属性,然后作为参数传递给ruby


注意:我还在安装步骤中添加了failonerror=true,但这只是我的一个用例假设。如果您愿意,可以删除它。

您的问题非常不清楚。您是在问如何在Ant中使用POSIX shell命令插值吗?然后,答案是:您不能,您需要在Ant中使用POSIX shell或Ant命令terpolation。首先,你为什么要使用curl,Ant没有自己的下载资产的方式吗?@JörgWMittag我编辑了这个问题,试图澄清一下。你想做什么还不是很清楚。你传递给Ruby进行计算的字符串不是有效的Ruby代码。你为什么试图使用Ruby执行shell代码?@JörgWMittag curl命令下载一个Ruby脚本。这只是自制网站推荐的一行安装。是的,curl下载一个Ruby脚本。但是,curl命令本身不是Ruby代码,所以你为什么要用Ruby执行它?这让我很困惑。太好了!这正是我想要的。谢谢。