摘要:如何在后台运行交互式任务?

详细信息:我正在尝试在ash shell(Busybox)下运行此简单脚本作为后台任务。



但是脚本会立即停止...



myscript.sh的内容...(仅是相关部分,其他则是我捕获SIGINT,SIGHUP等)

#!/bin/sh

catpid=0

START_COPY()
{
  cat /dev/charfile > /path/outfile &
  catpid = $!
}

STOP_COPY()
{
  kill catpid
}

netcat SOME_IP PORT | while read EVENT
do
  case $EVENT in
    start) START_COPY;;
    stop) STOP_COPY;;
  esac
done

通过简单的命令行测试,我发现bot cat和netcat尝试从tty中读取。
请注意,此netcat版本没有-e来限制tty。

现在可以做些什么来避免myscript停止运行?

我尝试过的事情没有成功:

1)netcat/cat ... tty的输出)

2)使用()在子 shell 中运行包含cat和netcat的块。这可能有效,但是然后如何获取Cat的PID?

交给您专家...

问题仍然存在。
一个简单的测试,供大家尝试:

1)在一个终端中运行netcat -l -p 11111(不带&)

2)在另一个终端中运行netcat localhost 11111&(这应该在一段时间后停止,并显示消息Stopped(TTY输入))

如何避免这种情况?

最佳答案

您可能需要netcat's "-d" option,它告诉它不要从STDIN读取。

关于shell - 在后台shell脚本中使用netcat/cat(如何避免Stopped(tty输入)?),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7042375/

10-12 16:00