2009-09-25 10 views
3

J'essaie de exec un script shell comme si Ant:script Ant shell exec - perd environnement

<exec executable="bash" newenvironment="false" dir="./"> 
    <arg value="script.sh"> 
</exec> 

Mais quand il exécute le script, toutes les références à des variables d'environnement telles que ma_variable $ revenir comme chaîne vide. Comment puis-je contourner cela? Selon http://ant.apache.org/manual/Tasks/exec.html je crois que l'environnement devrait être propogated. (Je réalise aussi que newenvironment est par défaut à false.)

Éditer: Je vois l'élément env, mais je ne vois pas comment passer l'environnement en masse. Y-a-t-il un moyen de faire ça?

+0

où est défini ma_variable? – Mark

+0

En tant que variable d'environnement ... La question est de savoir comment rendre un sous-processus visible dans l'environnement, c'est-à-dire lorsque Runtime.exec est appelé sous les couvertures et que l'environnement ne lui est pas transmis. Le passage de chaque élément n'est pas réalisable, car j'essaie d'écrire quelque chose de simple et d'extensible. – PHeath

Répondre

4

Avez-vous exporté la variable? Les sous-processus ne verront pas la variable à moins que vous exportez:

$ cat a.xml 
<project> 
    <exec executable="bash" newenvironment="false" dir="."> 
    <arg value="script.sh"/> 
    </exec> 
</project> 
$ cat script.sh 
#!/bin/sh 
env 
$ MY_VARIABLE=defined 
$ ant -f a.xml | grep MY_VARIABLE 
$ export MY_VARIABLE 
$ ant -f a.xml | grep MY_VARIABLE 
    [exec] MY_VARIABLE=defined 
0

Uhm, qui exécute un nouveau shell bash (avec tout ce que config et nouvel environnement sont définis pour votre utilisateur actif), puis le shell bash prend les arguments et exécute.

pouvez essayer ce qui suit pour exécuter dans l'environnement shell actuel

<exec executable="script.sh" newenvironment="false" dir="./"> 
</exec>