Ralf Wildenhues <[EMAIL PROTECTED]> writes:

> I'm thinking of something along these lines:
>
>   mkfifo at-fifo-err
>   mkfifo at-fifo-out
>   command='{ sleep 2; echo out ; echo err >&2; sleep 2; exit 42; }'
>   ( exec >at-fifo-out 2>at-fifo-err ; eval "$command" ) & at_cmd1=$!
>   tee < at-fifo-out stdout & at_cmd2=$!
>   tee < at-fifo-err stderr & at_cmd3=$!
>   wait $at_cmd2 $at_cmd3 $at_cmd1
>
> for an AT_CHECK_INTERACTIVE.  How portable is this?  It could degenerate
> to current AT_CHECK on systems without mkfifo.  Are there any such
> except DJGPP, MSDOS, MSYS?  Does Cygwin now have a working mkfifo?  Does
> anyone know of a solution without fifos?

Sure, just use pipes.  You shouldn't need any of the stuff with fifos
and sleeps and wait.  It will be a bit of a pain to save $command's
exit status, given that $command's output will be piped, but you can
use something like the following trick (taken from zgrep):

      # Fail if either grep or sed fails.
      exec 3>&1
      r=`
        exec 4>&1
        (grep "$pattern" 4>&-; echo $? >&4) 3>&- | sed "$sed_script" >&3 4>&-
      ` &&
      exit $r

By the way, the name AT_CHECK_INTERACTIVE confused me, since I assumed
it was testing an interactive program, or was a test you could run
interactively.  Perhaps a better name would be AT_CHECK_MONITOR (or
AT_CHECK_IMPATIENTLY :-)?


Reply via email to