1

首先,当我在 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 & 

也不行。。

任何见解都会很有用!

谢谢!

4

2 回答 2

1

当 ant exec 执行您的命令时,其标准输入默认情况下不绑定任何内容,因此netcat当您连接到侦听进程时将立即退出,因为没有更多内容可从 stdin 读取。

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

脚本.sh

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

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

构建.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>
于 2012-06-20T13:37:02.237 回答
0

我建议添加spawn="true"到您的exec中,以使您正在创建自己的后台进程。

于 2012-06-20T13:51:46.447 回答