从ant调用的bash脚本不起作用

时间:2012-06-20 12:43:50

标签: bash ant

首先,当我在ant之外调用它时,bash脚本工作正常。 这是build.xml的相关部分

<exec executable="/bin/bash" failonerror="true">
<arg value="-c" />
<arg value="script.sh" />
</exec>

以下是bash脚本(script.sh)中的相关行:

nc -l 8044 | tee ./nc-out.txt &

当我从bash调用script.sh时,nc-out.txt的内容将填充发送到端口8044的数据。

我需要&符号。

当从ant调用shell脚本时,好像创建了nc-out.txt,但它保持为空。

正常重定向,例如:

nc -l 8044 > nc-out.txt & 

也行不通..

任何见解都会有用!

谢谢!

2 个答案:

答案 0 :(得分:1)

当ant执行你的命令时,它的标准输入默认不与任何东西绑定,所以当你连接到监听过程时,netcat将立即退出,因为没有什么可以从stdin中读取。

由于您想在后台运行它,我假设您只想实现单向日志记录:您可以将-d参数添加到netcat以告诉他不要从标准输入中读取:

script.sh

#/bin/bash
netcat -d -l 8044 > nc-out.txt &

完全使用以下ant构建文件示例:

的build.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project basedir="." default="script" name="bleh">
    <target name="script">
        <exec executable="/bin/bash" failonerror="true">
            <arg value="-c" />
            <arg value="./script.sh" />
        </exec>
    </target>
</project>

答案 1 :(得分:0)

我建议您在exec添加spawn="true",以便为您创建自己的生活提供后台流程。