web-dev-qa-db-fra.com

Exécution d'un script shell via ant

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.
9
mahesh

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.

7
thekbb

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

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:

  • scp ne fonctionne pas vraiment bien car il n'y a pas d'informations d'identification
  • ftp avec mput ne peut pas télécharger tous les dossiers de manière récursive.
  • ncftpput ne sera pas accepté depuis un script ant

Ensuite, j'ai décidé de scinder en processus logiques. 

a besoin:

  1. brasser installer s'attendre
  2. besoin de login sans mot de passe via ssh sur votre télécommande

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% =)

0
Imeksbank