摘要:如何在后台运行交互式任务?
详细信息:我正在尝试在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/