2

我有一个创建 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 构建过程的一部分运行它时,超时不起作用。这两种环境有什么不同?

4

1 回答 1

0

我认为-t不会与重定向一起使用。

这里的手册页:

-t timeout
如果在 timeout 秒内没有读取完整的输入行,则导致读取超时并返回失败。如果 read 不是从终端管道读取输入,则此选项无效。

于 2013-03-21T13:26:35.793 回答