首先,当我在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 &
也行不通..
任何见解都会有用!
谢谢!
答案 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"
,以便为您创建自己的生活提供后台流程。