Как решить `$ ('не допускается в качестве имени глобальной переменной при вызове Ruby из Ant - PullRequest
0 голосов
/ 16 мая 2019

У меня есть необходимость установить Homebrew на удаленный компьютер Mac, и из-за некоторых дизайнерских решений единственный способ запустить что-либо на этом компьютере - выполнить скрипт Ant.

Я пытаюсь адаптировать инструкции с веб-сайта Homebrew и запустить эквивалент этого:

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

1 Ответ

1 голос
/ 16 мая 2019

Ant's 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" к этапу установки, но это было лишь предположение с моей стороны. Его можно удалить, если хотите.)

...