我需要在远程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进行操作。
答案 0 :(得分:1)
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>
在这里,首先将远程安装脚本卷曲并使用exec
的{{1}}属性作为Ant属性存储,然后作为参数传递给ruby。
(请注意,我还向安装步骤中添加了outputproperty
,但这只是我的用例假设。可以根据需要将其删除。)