2013-06-24 124 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%=)