通过ant执行Shell脚本

mah*_*esh 9 unix ant

我有一个名为Call.sh的shell脚本,它在内部调用其他脚本(即.sh),对我来说工作正常.现在我想从ant实用程序执行Call.sh.我创建了一个调用.sh的build.xml.但其中一个脚本要求输入,但是由于进一步的操作失败,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>
Run Code Online (Sandbox Code Playgroud)

Call.sh

    #!/bin/bash
    echo "Begining the execution......"
    sleep 1
    sh ./input.sh
    sh ./AutomateCom.sh
    sh ./Clean.sh
    echo "*****_______*****_______"
Run Code Online (Sandbox Code Playgroud)

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"
Run Code Online (Sandbox Code Playgroud)

当我运行蚂蚁时:它不断运行....下面是我说蚂蚁时的o/p

[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
......................................
Run Code Online (Sandbox Code Playgroud)

当我跑./input.sh时我的期望是什么,同样蚂蚁应该问我输入

[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.
Run Code Online (Sandbox Code Playgroud)

dev*_*ull 20

尝试在ant目标中指定脚本的完整路径:

<target name="test">
  <exec executable="/bin/bash">
    <arg value="/complete/path/to/input.sh"/>
    <arg value="/tmp"/>
  </exec>
</target>
Run Code Online (Sandbox Code Playgroud)

这相当于在shell中发出以下命令:

/bin/bash /complete/path/to/input.sh /tmp
Run Code Online (Sandbox Code Playgroud)

<arg value="..."/>表示一个论点.所以你有2个参数/bin/bash,脚本和路径/tmp.如果您的脚本没有使用传递给的额外参数bin/bash,那么这些参数将被忽略.

如果您的脚本input.sh位于/tmp,您可以说

  <exec executable="/bin/bash">
    <arg value="/tmp/input.sh"/>
  </exec>
Run Code Online (Sandbox Code Playgroud)

要么

  <exec dir="/tmp" executable="/bin/bash">
    <arg value="input.sh"/>
  </exec>
Run Code Online (Sandbox Code Playgroud)


the*_*kbb 7

我知道你已经回答了你的问题,并继续前进.但是我想为后代指出一些事情.你为什么用蚂蚁?看起来你只需要一个shell脚本就会更好.

不要执行bash脚本.你没有列出所有脚本的内容,但call.shinput.sh是微不足道的蚂蚁在本地做.这将使您的构建脚本平台独立,并整合日志记录.您可以使用输入任务直接从ant处理输入

<input
    message="Please enter organization name:"
    addproperty="org.name"
/>
Run Code Online (Sandbox Code Playgroud)

但是我强烈建议您不要有等待用户输入的构建脚本.您可以创建org.name一个属性,然后在构建时在命令行上指定它:ant -Dorg.name=yak

你不需要在sql文件上进行find替换,你可以在sql中使用变量并在执行时传入它们.(实现将依赖于db)

你的例子来自root shell,这也伤害了我的灵魂.不要以root身份登录.