我有一个创建 FIFO 并启动将输出写入 FIFO 的程序的脚本。然后我读取并解析输出,直到程序退出。
MYFIFO=/tmp/myfifo.$$
mkfifo "$MYFIFO"
MYFD=3
eval "exec $MYFD<> $MYFIFO"
external_program >&"$MYFD" 2>&"$MYFD" &
EXT_PID=$!
while kill -0 "$EXT_PID" ; do
read -t 1 LINE <&"$MYFD"
# Do stuff with $LINE
done
当程序仍在运行时,这可以很好地读取输入,但看起来读取超时被忽略,并且在外部程序退出后读取调用挂起。
我在其他脚本中成功地使用了超时读取,并且一个简单的测试脚本正确地忽略了外部程序超时。我在这里做错了什么?
编辑:当我从命令行运行我的脚本时,它看起来像read -t
预期的功能,但是当我作为 xcodebuild 构建过程的一部分运行它时,超时不起作用。这两种环境有什么不同?