从 Ant 调用 Ruby 时,如何解决 `$(' is not allowed as a global variable name
How do I solve `$(' is not allowed as a global variable name when invoking Ruby from Ant
我需要在远程 Mac 机器上安装 Homebrew,并且由于一些设计决定,我可以 运行 在那台机器上做任何事情的唯一方法是执行 Ant 脚本。
我正在尝试调整 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?我可以将 Homebrew 安装命令放在 bash 脚本中,但我更愿意直接从 Ant 修复语法。
Ant 的 exec
任务经常因复杂的命令行操作而阻塞。一般来说,最好坚持使用多个 exec
步骤,包含一系列单独的 arg value
而不是完整的 arg line
。
试试这个:
<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>
此处远程安装脚本首先被卷曲并存储为 Ant 属性 使用 exec
的 outputproperty
属性,然后作为参数传递给 ruby.
(请注意,我还在安装步骤中添加了 failonerror="true"
,但这只是我的一个用例假设。如果需要,可以将其删除。)
我需要在远程 Mac 机器上安装 Homebrew,并且由于一些设计决定,我可以 运行 在那台机器上做任何事情的唯一方法是执行 Ant 脚本。
我正在尝试调整 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?我可以将 Homebrew 安装命令放在 bash 脚本中,但我更愿意直接从 Ant 修复语法。
Ant 的 exec
任务经常因复杂的命令行操作而阻塞。一般来说,最好坚持使用多个 exec
步骤,包含一系列单独的 arg value
而不是完整的 arg line
。
试试这个:
<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>
此处远程安装脚本首先被卷曲并存储为 Ant 属性 使用 exec
的 outputproperty
属性,然后作为参数传递给 ruby.
(请注意,我还在安装步骤中添加了 failonerror="true"
,但这只是我的一个用例假设。如果需要,可以将其删除。)