Ant EXEC не может запустить скрипт bash - PullRequest
2 голосов
/ 16 ноября 2010

Я пытаюсь использовать ant для запуска скрипта bash.

Я обнаружил, что директива exec является инструментом для работы

Я создал bash-скрипт test.sh и в моей цели муравья я добавил:

<project basedir=".">
    <property name="temp.deployment.dir" value="temp_deployment_dir"/>
    <property name="temp.dir" value="temp_upload_dir"/>
    <property name="src.dir" value="www"/>
    <property name="js.dir" value="${src.dir}/public/js"/>
    <property name="css.dir" value="${src.dir}/public/css"/>
    <property name="img.dir" value="${src.dir}/public/images/"/>
    <target name="clean">
            <delete dir="${temp.dir}"/>
    </target>
    <target name="update-statics">
            <mkdir dir="${temp.dir}"/>
            <!--TODO: add statics in -->
    </target>
    <target name="deploy">
            <mkdir dir="${$temp.deployment.dir}"/>
            <copy todir="${temp.deployment.dir}">
                    <fileset dir="${src.dir}"/>
            </copy>
            <exec executable="bash" newenvironment="false" dir=".">
                <arg value="cmd_update.sh"/>
            </exec>
     </target>
</project>

Я получаю успешную сборку при запуске, но test.sh никогда не запускается.

Я гуглил и искал, что я могу делать неправильно, но из-за отсутствия ошибки у меня возникают проблемы с отладкой. Кто-нибудь знает правильное использование директивы exec или если я что-то не так делаю? Из того, что я могу сказать, я делаю это так же, как и любой другой пример exec, который я нашел.

Ответы [ 3 ]

4 голосов
/ 12 сентября 2011

Если у вас есть shebang в вашем скрипте Bash, и ваш скрипт исполняемый, вам не нужно включать bash в качестве команды.(Я, конечно, предполагаю Linux, Unix или Mac).

<exec executable="${path.to.command}/cmd_update.sh"
    failonerror="true"
    osfamily="unix"/>

Всегда устанавливайте failonerror в true и всегда устанавливайте osfamily.

Возможно, вы захотите установить другие параметры, например свойство, в котором хранятся STDOUT и STDERR .Вы также можете передавать параметры через подзадачи <arg value>.

Я бы не стал использовать параметр searchpath, поскольку это может быть дырой в безопасности.

1 голос
/ 07 июля 2011

Попробуйте:

<exec executable="**/bin/**bash" newenvironment="false" dir=".">  
    <arg value="cmd_update.sh"/>             
</exec>
1 голос
/ 16 ноября 2010

Перво-наперво - я обычно съеживаюсь, когда вижу руководителя, обычно это что-то вонючее.Вы хотите установить для failonerror значение «true» при использовании exec и убедиться, что ваш скрипт завершается с правильным кодом возврата, где это необходимо.

Вам также не нужно вызывать bash, вы можете вызвать скрипт напрямую- убедитесь, что он исполняемый.

Вывод ant -v будет релевантным.

...