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 ビルドプロセスの一部として実行すると、タイムアウトが機能しません。これら 2 つの環境の違いは何ですか?