为什么从xcodebuild启动的脚本中的“读取-t”块?

时间:2013-03-20 21:29:04

标签: macos bash xcodebuild

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

1 个答案:

答案 0 :(得分:0)

我认为-t无法使用重定向。

从手册页here

  

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