My pipe flushes late
Robert Schmidt
rschm@broadpark.no
Wed Aug 20 13:15:00 GMT 2008
Brian Dessent wrote:
> Robert Schmidt wrote:
> Oh, I missed that qualifier. So, what you really mean is that sed is a
> total red herring as you aren't actually using sed but something else
> entirely in the real application? Anyway, if you absolutely must have a
> d2u that is line buffered instead of full buffered then you can use
>
> perl -pe 'BEGIN { $| = 1; } s,\r$,,;' | whatever_the_actual_thing_is
Thanks! In the meantime, I've discovered that the reason for d2u (the
read builtin freezing on single 0x0D characters) seems to be gone in
cygwin, so I can simplify my script.
For completeness, my real script is:
#!/bin/bash
# read stalls on 0x0d in input, d2u fixes that, but introduces buffering
d2u | while true
do
read -r || exit
echo `date +"%F %T"` "$REPLY"
done
... where d2u can probably be removed now.
It's used to timestamp output from various services, some of which
output DOS line endings. E.g. my-service.sh | prefix-time.sh.
If there was a way to execute a command (date, in my case) from within
the sed replacement section, I'd be home free with a single sed process
instead of a chunky bash process lurking about.
Robert
More information about the Cygwin-talk
mailing list