it-swarm.com.de

Ausführen von Shell Script über ant

Ich habe ein Shell-Skript namens Call.sh, das intern andere Skripte (d. H. .Sh) aufruft und für mich einwandfrei funktioniert. Nun möchte ich Call.sh von ant Utility ausführen. Ich habe eine build.xml erstellt, die die .sh aufruft. Aber eines der Skripte verlangt eine Eingabe, aber ant gibt mir nicht die Möglichkeit, die Eingabe zu geben, aufgrund derer weitere Operationen fehlschlagen. Hier finden Sie die 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"

wenn ich die Ameise laufen lasse: Sie läuft ununterbrochen ... unten ist das O/P, wenn ich Ameise sage

[[email protected] 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
......................................

Was ich erwarte, wenn ich ./input.sh betreibe, sollte mich Ant auf die Eingabe fragen

[[email protected] 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

Ich habe gehört, Sie haben Ihre Frage beantwortet und sind weitergezogen. Ich möchte jedoch einige Dinge für die Nachwelt aufzeigen. Warum benutzt du Ameise? Mit einem Shell-Skript scheint es Ihnen besser zu gehen.

Führen Sie keine Skripts aus. Sie haben nicht den Inhalt all Ihrer Skripts aufgelistet, aber call.sh und input.sh sind trivial in nativ zu tun. Dadurch wird Ihre Build-Script-Plattform unabhängig und konsolidiert die Protokollierung. Sie können Ihre Eingabe direkt von ant mit der Task input bearbeiten 

<input
    message="Please enter organization name:"
    addproperty="org.name"
/>

Ich möchte Sie jedoch dringend bitten, kein Build-Skript zu haben, das auf Benutzereingaben wartet. Sie können org.name zu einer Eigenschaft machen und beim Erstellen einfach in der Befehlszeile angeben: ant -Dorg.name=yak

Sie müssen die SQL-Datei nicht ersetzen, sondern Sie können Variablen in der SQL-Datei verwenden und diese bei der Ausführung übergeben. (Implementierung wird db-abhängig sein)

Es tut mir auch weh, dass deine Beispiele von einer Root-Shell stammen. Melden Sie sich nicht als root an.

7
thekbb

Geben Sie den vollständigen Pfad zum Skript im Ant-Ziel an:

<target name="test">
  <exec executable="/bin/bash">
    <arg value="/complete/path/to/input.sh"/>
    <arg value="/tmp"/>
  </exec>
</target>

Dies entspricht der Ausgabe des folgenden Befehls in der Shell:

/bin/bash /complete/path/to/input.sh /tmp

<arg value="..."/> bezeichnet ein Argument. Sie haben also 2 Argumente für /bin/bash, Pfad zum Skript & /tmp. Wenn Ihr Skript keine zusätzlichen Argumente verwendet, die an bin/bash übergeben werden, werden diese ignoriert.

Wenn sich Ihr Skript input.sh in /tmp befindet, können Sie entweder sagen

  <exec executable="/bin/bash">
    <arg value="/tmp/input.sh"/>
  </exec>

oder

  <exec dir="/tmp" executable="/bin/bash">
    <arg value="input.sh"/>
  </exec>
20
devnull

Meine Idee war, das javadoc innerhalb von Netbeans mit seinem Ant/Skript " Run target -> default " und danach mit demselben Ant-Skript (oder sogar einem anderen) zu generieren -xml) zum Hochladen auf den Server. 

Eigentlich sollte es das Hauptziel sein, ein Javadoc zu generieren und gleichzeitig den gesamten Ordner auf die Fernbedienung hochzuladen !!! Ich habe macOS 10.12.4 als Client und Ubuntu 16.04 als Ziel verwendet.

Ich habe alles von unten probiert:

  • scp funktioniert nicht wirklich gut, da keine Berechtigung vorhanden ist
  • ftp mit mput kann nicht alle Ordner rekursiv hochladen.
  • ncftpput wird nicht vom Ant-Skript akzeptiert

Dann habe ich beschlossen, mich in logische Prozesse zu teilen. 

erfordert:

  1. brew installieren erwarten
  2. brauche login passwordless via ssh auf deiner Fernbedienung

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

Das ist es. Klicken Sie einfach mit der rechten Maustaste auf ftp.xml " Ziele ausführen -> Andere Ziele -> ftp " und der javadoc.Zip wird hochgeladen und dort entpackt. 

Natürlich müssen Sie vor dem Start javadoc.Zip erstellen. Es ist möglich, die gesamte Passage in build.xml zu integrieren.

Für mich gearbeitet 100% =)

0
Imeksbank