2010-11-15 7 views
2

J'essaie d'utiliser ant pour exécuter un script bash.Ant EXEC ne parvient pas à exécuter le script bash

Ive a trouvé que la directive exec est l'outil pour le travail

J'ai créé un script bash test.sh et dans ma cible ant i ajouté:

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

Je reçois la construction réussie quand je exécutez-le, mais le test.sh n'est jamais exécuté. J'ai recherché sur Google ce que je pouvais faire de mal mais comme il n'y a pas d'erreur, j'ai du mal à le déboguer. Est-ce que quelqu'un connaît le bon usage de la directive exec ou s'il y a quelque chose que je fais clairement mal? De ce que je peux dire, je le fais comme d'autres exemples d'exec que j'ai trouvés.

+0

Est-ce que bash est sur votre PATH? Cmd_update.sh est-il dans le répertoire de travail courant? – corriganjc

+0

@ user508771 certaines informations supplémentaires seraient utiles, en particulier la sortie de l'exécution de 'ant deploy. Voir aussi http://meta.stackexchange.com/questions/22754/sscce-how-to-provide-examples-for-programming-questions –

Répondre

1

Les premières choses d'abord - Je grince habituellement quand je vois un exec, c'est généralement quelque chose de malodorant. Vous voulez définir failonerror sur 'true' lorsque vous utilisez exec, et assurez-vous que votre script se termine avec un code de retour approprié, le cas échéant.

Vous n'avez pas non plus besoin d'appeler bash, vous pouvez appeler le script directement - assurez-vous qu'il est exécutable.

La sortie de ant -v serait pertinente.

1

Essayez:

<exec executable="**/bin/**bash" newenvironment="false" dir="."> 
    <arg value="cmd_update.sh"/>    
</exec> 
4

Si vous avez le shebang dans votre script Bash, et votre script est exécutable, vous n'avez pas besoin d'inclure bash comme la commande. (Je suppose, bien sûr, Linux, Unix ou Mac).

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

toujours mis failonerror à true et toujours mis osfamily.

Il peut-être d'autres choses que vous souhaitez définir comme la propriété où STDOUT et STDERR sont stockés. Vous pouvez également transmettre des paramètres via les sous-tâches <arg value>.

Je n'utiliserais pas le paramètre searchpath car cela pourrait être un trou de sécurité.

+0

Ceci m'a permis de résoudre un problème similaire. Merci, cela m'a sauvé beaucoup de temps. – prolink007

Questions connexes