2013-06-24 167 views
9

我有一個名爲Call.sh的shell腳本,它在內部調用其他腳本(即.sh)並且對我來說工作正常。現在我想從螞蟻實用程序執行Call.sh。我做了一個調用.sh的build.xml。但其中一個腳本要求輸入,但由於進一步的操作失敗,螞蟻並沒有給我機會提供輸入。請從下面的代碼通過螞蟻執行Shell腳本

在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" 

當我運行螞蟻:它運行汽車無....下面是O/P當我說螞蟻

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

我期待什麼,當我運行./input.sh,in同樣的方式螞蟻應該問我要輸入

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

你沒有提到這個問題很難找出這裏的問題。嘗試指定'input.sh'的完整路徑。 – devnull

+0

mahesh

+0

小改變Call.sh.在哪裏指定完整路徑。當我做螞蟻。它構建但沒有任何反應,我的意思是它應該執行Call.sh. – mahesh

回答

6

我知道你有你的問題回答,並已經轉移。不過,我想指出一些後人的事情。你爲什麼使用螞蟻?看起來你會更好,只是一個shell腳本。

不要執行bash腳本。您沒有列出所有腳本的內容,但call.shinput.sh在ant中本地執行的操作並不重要。這將使您的構建腳本平臺獨立並鞏固日誌記錄。 您可以直接從螞蟻與input任務

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

處理您的輸入不過我強烈建議你不要有等待用戶輸入構建腳本。你可以讓org.name屬性,然後簡單地指定它在生成命令行:ant -Dorg.name=yak

你不需要做一個找到替換SQL文件,你可以在SQL中使用的變量,並通過他們在當你執行它。 (實現將取決於數據庫)

它也傷害了我的靈魂,您的示例來自根shell。不要以root身份登錄。

16

嘗試指定的完整路徑中的腳本螞蟻目標:

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

這等同於在殼發出以下命令:

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

<arg value="..."/>表示參數。所以你有兩個參數/bin/bash,腳本的路徑& /tmp。如果您的腳本沒有使用傳遞給bin/bash的額外參數,那麼這些參數將被忽略。

如果你的腳本input.sh位於/tmp,你可以說

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

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

我的想法是內 Netbeans的生成的javadoc使用它的「運行目標 - >默認」 ant腳本,之後用相同的ant腳本(甚至另一個-xml)上傳到服務器。

其實主要目標應該是創造一個javadoc,並同時上傳整個文件夾到遠程!!!我用的MacOS 10.12.4爲客戶和的Ubuntu 16.04作爲目標。

我什麼都試過從belowe:

  • SCP因爲沒有憑據
  • FTP與它的MPUT無法上傳所有文件夾遞歸不工作真的很好。
  • ncftpput不會從螞蟻腳本

然後,我決定分割成邏輯進程接受。

要求:

  1. 釀造安裝期望
  2. 需要在你的遠程

ftp.xml通過ssh登錄passwordless

<?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 

就是這樣。 Justt右擊ftp.xml運行目標 - >其他目標 - >FTP」 和javadoc的。郵件將被上傳並解壓縮到那裏。

當然,你需要創建javadoc.zip之前start.It可能在整個通道建成的build.xml

爲我工作100%=)