管道到shell脚本问题

时间:2014-04-25 19:08:55

标签: pipe sh netcat

我遇到了问题,并且在线寻找解决方案时遇到了困难。我的代码关闭了一个日志文件,并在写入文件时使用netcat与外部服务器连接。

这是我工作代码的一个简单示例,之后我会解释这个问题。

# function that watches input for '$servertag' variable
serverwatch() {
  while read data
  do
    if [ `strindex "$data" "$servertag"` -ge 0 ]; then
      ....
      nc <server_ip> 1234
      ....
    fi
  done
}

# Tail the log file and pipe to functions
tail -f messages | serverwatch

问题在于,虽然连接已成功建立,但来自“&#39;消息”的数据仍然存在。文件正在传递给netcat。我在本地对数据进行了一些基本的解析,但我不知道如何阻止数据通过netcat发送。

我应该很快注意到我希望在大多数DD-WRT版本上都有这个功能,所以我试图不安装任何新的软件包。另外,bash似乎在我的构建上被打破/最小化,所以我试图避免使用bash。

如果您对此问题有任何疑问,解决方案或其他问题的参考,请与我们联系。

谢谢,

詹姆斯

1 个答案:

答案 0 :(得分:2)

netcat继承了stdin描述符。从其他地方重定向,例如:

nc <server_ip> 1234 < /dev/null
不幸的是,netcat在到达输入结束时关闭了连接,所以如果你想让连接保持打开状态,你可以使用-d标志。

nc -d <server_ip> 1234 < /dev/null