2013-06-24 15 views
9

Mam skrypt powłoki o nazwie Call.sh, który wewnętrznie wywołuje inne skrypty (np. .sh) i działa dobrze dla mnie. Teraz chcę wykonać Call.sh z narzędzia ant. Zrobiłem build.xml, który wywołuje .sh. Ale jeden ze skryptów prosi o dane wejściowe, ale ant nie daje mi możliwości przekazania danych wejściowych, z powodu których dalsze operacje zawiodą. Tutaj znajdziesz kodyWykonywanie skryptu powłoki za pomocą ant

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" 

gdy uruchomię Mrówka: To działa nieprzerwanie .... poniżej jest o/p kiedy mówię mrówka

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

co się spodziewać, kiedy biegnę ./input.sh,in sam sposób mrówka powinna zapytać mnie dla wejścia

[[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. 
+0

Ty nie wspomniałem o problemie tak trudnym do ustalenia, o co tu chodzi. Spróbuj podać pełną ścieżkę do 'input.sh'. – devnull

+0

mahesh

+0

mała zmiana Call.sh. Gdzie podać pełną ścieżkę. Kiedy robię mrówki. Buduję, ale nic się nie dzieje, mam na myśli, że powinien wykonać Call.sh. – mahesh

Odpowiedz

6

Rozumiem, że masz swoje pytanie odpowiedział i przeszły. Chciałbym jednak wskazać kilka rzeczy dla potomności. Dlaczego używasz mrówki? wygląda na to, że lepiej będzie mieć tylko skrypt powłoki.

Nie należy uruchamiać skryptów bash. Nie podano zawartości wszystkich skryptów, ale są one łatwe do wykonania w mrówce. Spowoduje to niezależność platformy skryptów budowania oraz skonsolidowanie rejestrowania. można obsługiwać wejście bezpośrednio z ant z zadaniem

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

input Jednak ja zdecydowanie zachęcam do nie mieć skrypt kompilacji, który czeka na dane użytkownika.Możesz uczynić z org.name właściwość, a następnie po prostu określ ją w linii poleceń podczas kompilacji: ant -Dorg.name=yak

Nie musisz wymieniać szukania w pliku sql, możesz używać zmiennych w sql i przekazywać je, gdy wykonaj to. (implementacja będzie zależna od db)

Boli również moją duszę, że twoje przykłady pochodzą z powłoki głównej. nie loguj się jako root.

16

Spróbuj podając pełną ścieżkę do skryptu w ant docelowa:

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

jest to odpowiednik wydając następującą komendę w powłoce:

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

<arg value="..."/> oznacza argument. Masz więc 2 argumenty do /bin/bash, ścieżki do skryptu & /tmp. Jeśli twój skrypt nie użyje dodatkowych argumentów przekazanych do bin/bash, to zostaną one zignorowane.

Jeśli skrypt input.sh znajduje się w /tmp, można powiedzieć

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

lub

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

Mój pomysł był aby wygenerować javadoc ciągu Netbeans używając to „target Uruchom -> default” ant skrypt, a potem z tego samego skryptu ant (lub nawet jeszcze jeden -xml) przesłać do serwera .

Właściwie głównym celem powinno być, aby wygenerować javadoc i przesłać jednocześnie cały folder na pilocie !!! użyłem MacOS 10.12.4 jako klient i Ubuntu 16,04 jako cel.

Próbowałem wszystkiego od belowe:

  • SCP nie działa naprawdę dobrze, ponieważ nie ma poświadczeń
  • ftp z jego mput nie może przesłać wszystkie foldery rekursywnie.
  • ncftpput nie będą przyjmowane od mrówek skryptu

Wtedy postanowiłem podzielić na procesach logicznych.

wymaga:

  1. napar zainstalować oczekiwać
  2. musi zalogować passwordless poprzez ssh na pilocie zdalnego

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 

To wszystko. Justt prawym przyciskiem myszy na ftp.xml "Run skierowany ->inne cele ->ftp" i JavaDoc.zip zostanie załadowany i rozpakowany.

Oczywiście trzeba utworzyć javadoc.zip przed start.It możliwe jest zbudowanie w całym przejściu do build.xml

pracował dla mnie 100% =)

Powiązane problemy