J'ai un script Shell appelé Call.sh qui appelle en interne d'autres scripts (c'est-à-dire .sh) et qui fonctionne correctement pour moi. Maintenant, je veux exécuter Call.sh à partir de ant utility. J'ai fait un build.xml qui appelle le .sh. Mais l'un des scripts demande une entrée, mais ant ne me donne pas la chance de donner l'entrée en raison de laquelle les opérations ultérieures échouent. Veuillez trouver ci-dessous les codes
Build.xml
<project name="Sample" default="info">
<target name="info">
<exec executable="/bin/bash">
<arg value="/full path/Call.sh"/>
<arg value="/tmp"/>
</exec>
</target>
</project>
Call.sh
#!/bin/bash
echo "Begining the execution......"
sleep 1
sh ./input.sh
sh ./AutomateCom.sh
sh ./Clean.sh
echo "*****_______*****_______"
input.sh
#!/bin/bash
echo "enter the Organization name"
read Orgname
echo "Orgname is : $Orgname"
sed "s/000/$Orgname/g" Final.sql >> ExecuteID.sql
echo "Organization name has been replaced with $Orgname"
quand je cours la fourmi: il fonctionne continuellement .... ci-dessous est le o/p quand je dis ant
[root@krog2-rhel5-64 Work]# ant
Buildfile: /root/test/Work/build.xml
info:
[exec] enter the Organization name
[exec] Orgname is :
[exec] Organization name has been replaced with
BUILD SUCCESSFUL
Total time: 0 seconds
......................................
Ce à quoi je m'attends quand je lance ./input.sh, de la même manière et devrait me demander son apport
[root@krog2-rhel5-64 Work]# ./input.sh
enter the Organization name
**yak**
Orgname is : yak
Organization name has been replaced with yak
However ant doesn't give me opportunity to Prompt for the user input. Any suggestions.
Je crois comprendre que votre question a reçu une réponse et que vous avez passé à autre chose. Cependant, je tiens à souligner quelques points pour la postérité. Pourquoi utilisez-vous fourmi? il semble que vous seriez mieux avec seulement un script Shell.
Ne pas exécuter à bash les scripts. Vous n'avez pas répertorié le contenu de tous vos scripts, mais call.sh
et input.sh
sont faciles à faire de manière native dans ant. Cela rendra votre plate-forme de script de construction indépendante et consolidera la journalisation. Vous pouvez gérer votre entrée directement depuis ant avec la tâche input .
<input
message="Please enter organization name:"
addproperty="org.name"
/>
Cependant, je vous encourage vivement à ne pas avoir de script de construction qui attende les entrées de l'utilisateur. Vous pouvez transformer le org.name
en propriété, puis le spécifier simplement sur la ligne de commande lors de la génération: ant -Dorg.name=yak
Vous n'avez pas besoin de rechercher, remplacer, le fichier SQL, vous pouvez utiliser des variables dans le SQL et les transmettre lorsque vous l'exécutez. (l'implémentation dépendra de la base de données)
Cela fait également mal à mon âme que vos exemples proviennent d'une racine Shell. ne vous connectez pas en tant que root.
Essayez de spécifier le chemin complet du script dans la cible ant:
<target name="test">
<exec executable="/bin/bash">
<arg value="/complete/path/to/input.sh"/>
<arg value="/tmp"/>
</exec>
</target>
Cela équivaut à émettre la commande suivante dans le shell:
/bin/bash /complete/path/to/input.sh /tmp
<arg value="..."/>
dénote un argument. Donc, vous avez 2 arguments pour /bin/bash
, le chemin du script et /tmp
. Si votre script n'utilise pas d'arguments supplémentaires passés à bin/bash
, ceux-ci seront ignorés.
Si votre script input.sh
se trouve dans /tmp
, vous pouvez dire
<exec executable="/bin/bash">
<arg value="/tmp/input.sh"/>
</exec>
ou
<exec dir="/tmp" executable="/bin/bash">
<arg value="input.sh"/>
</exec>
Mon idée était de générer le javadoc au sein de Netbeans en utilisant le script " Run target -> default ", puis le même script ant (ou même un autre). -xml) à télécharger sur le serveur.
En fait, l’objectif principal devrait être de générer un javadoc et de télécharger simultanément tout le dossier sur la télécommande !!! J’ai utilisé le macOS 10.12.4 en tant que client et Ubuntu 16.04 en tant que cible.
J'ai tout essayé de dessous:
Ensuite, j'ai décidé de scinder en processus logiques.
a besoin:
ftp.xml
<?xml version="1.0" encoding="UTF-8"?>
<project name="ASMEMU" default="all" basedir="/bin" >
<target name="ftp">
<exec dir="/Users/macos/NetBeansBash" executable="/bin/bash">
<arg value="asmemu_mkdir.sh" />
<arg value="ASMEMU" />
</exec>
<exec dir="/Users/macos/NetBeansBash" executable="/bin/bash">
<arg value="asmemu_upload_Zip.sh" />
<arg value="ASMEMU" />
</exec>
<exec dir="/Users/macos/NetBeansBash" executable="/bin/bash">
<arg value="asmemu_unzip.sh" />
<arg value="ASMEMU" />
</exec>
</target>
</project>
asmemu_mkdir.sh
#!/bin/bash
uhost="example.de"
uname="usernameusername"
upass="pwdpwd"
remote=/httpdocs/destination1/destination2
pwd
ftp -in <<EOF
open $uhost
user $uname $upass
cd $remote
mkdir $1
close
bye
EOF
asmemu_upload_Zip.sh
#!/bin/bash
uhost="example.de"
uname="usernameusername"
upass="pwdpwd"
remote=/httpdocs/th/ra
cd /Users/macos/NetBeansProjects/$1/dist/
pwd
ftp -in <<EOF
open $uhost
user $uname $upass
cd $remote/$1
mput javadoc.Zip
close
bye
EOF
asmemu_unzip.sh
ssh [email protected] /bin/bash <<EOT
cd /var/www/vhosts/example.de/httpdocs/th/ra/$1
unzip javadoc.Zip
rm javadoc.Zip
EOT
C'est tout. Juste un clic droit sur ftp.xml " Exécuter les cibles -> Autres cibles -> ftp " et le fichier javadoc.Zip sera chargé. et décompressé là.
Bien sûr, vous devez créer le fichier javadoc.Zip avant de commencer. Il est possible d’intégrer le passage entier dans build.xml
Travaillé pour moi à 100% =)