Ralph,
Nice solution:
examine dd’s STDERR then ‘break’.
Thanks for the test script - I like your generation of characters using ‘dc’.
cheers!
steve
On 27 Jun 2023, at 16:23, Ralph Corderoy
<ralph(a)inputplus.co.uk> wrote:
Hi Steve,
I’ve never figured out how to use ‘dd’ so it
returns after a single
block is written doesn’t close the input, killing the pipeline, or
cause the rest of the data to be discarded.
I think this meets your description and complies with POSIX's dd(1p)
here.
$ seq 33 126 | sed 's/$/P/' | dc |
while :; do
LC_ALL=C dd bs=10 count=1 2>dd.err | sed -n l
grep -q '^[^0].* records in$' dd.err || break
done
!"#$%&'()*$
+,-./01234$
56789:;<=>$
?@ABCDEFGH$
IJKLMNOPQR$
STUVWXYZ[\\$
]^_`abcdef$
ghijklmnop$
qrstuvwxyz$
{|}~$
$
$ rm dd.err
I set the locale so the format of dd's stderr report is known.
--
Cheers, Ralph.
--
Steve Jenkin, IT Systems and Design
0412 786 915 (+61 412 786 915)
PO Box 38, Kippax ACT 2615, AUSTRALIA
mailto:sjenkin@canb.auug.org.au