BusyBox - Bash 信号处理程序“echo”问题

BusyBox - Bash 信号处理程序“echo”问题

我有一个 Bash 脚本,首先使用打开 TCP 客户端套接字nc并通过该套接字发送启动命令。然后,服务器通过套接字向我发送回数据(打印ncstdout),当用户对他们看到的数据感到满意时,他们按 Ctrl+C,脚本应该通过套接字发送停止命令到告诉服务器停止正在做的事情。

为了使nc套接字保持打开任意时间,我打开一个 FIFO 并tail -n +1 -f从该 FIFO 进入nc,因此要通过套接字发送命令,脚本只需echo将 es 发送到 FIFO 即可。

但是在我的信号处理程序执行之后,echo发送停止命令的调用将挂起/冻结并且永远不会返回,因此脚本只是坐在那里。

这是我的(简化的)代码:

#! /bin/bash

# make a FIFO to use as STDIN for netcat
FIFO=/tmp/temp_fifo
mkfifo $FIFO

# open up the client socket
TAIL_PID_FILE=/tmp/tail_pid
(tail -n +1 -f $FIFO & echo $! >&3) 3> $TAIL_PID_FILE | /usr/bin/nc some_server 9999 &

# get PID of tail process
TAIL_PID=$(<$TAIL_PID_FILE)

# send the start command to tell the server to start doing its work
echo "start command" >> $FIFO

# register a signal handler so that we wait until the user presses Ctrl+C
trap "echo caught signal, stopping..." SIGINT SIGTERM

# sleep 'forever' (until the signal gets caught)
sleep 4294967295

# send the stop command. ***this right here is what hangs***
echo "stop command" >> $FIFO

# kill tail process
kill $TAIL_PID

# remove FIFO
rm -f $FIFO

当在 Linux 中的 Bash 版本 4.1.2 中运行此命令时,它会正常运行,即echo不会挂起,因此停止命令会成功发送。但 BusyBox(版本 1.22.1,在 Windows/MobaXterm 中)挂起。

我在这里对我的信号处理程序做错了什么(例如未定义的行为),因此为什么我的代码在 BusyBox 中不起作用?或者这是否暗示着 BusyBox 中存在我不知道的错误或缺失功能?

相关内容