> Thanks for checking this. I like this, its more compact than the > current code. However the reason why I did not use this, was that the > following fragment: > > $ while true; do res=$(od -N2 -d /dev/urandom | cut -s -d' ' -f2); echo > $res; if [ -z "$res" ]; then break; fi ; done > 61581 > 42056 > 38021 > > $ > > give me a empty string in $res sometimes. I haven't really put any > though into why this is, maybe just a side effect of running it in th > while loop?
No, it's a side effect of od printing a decimal number which is sometimes less than 10000 and so is space-padded on the left. Try: while : ; do x=$(od -N2 -d /dev/urandom); y=$(echo "$x" | cut -s -d' ' -f2); echo $y; if test -z "$y"; then echo "$x"; break; fi; done When it errors out, $x contains: 0000000 9611 0000002 Now is it clear? Include *all* the fields other than 1 and it will never fail: while :; do res=$(od -N2 -d /dev/urandom | cut -s -d' ' -f2-); echo $res; if [ -z "$res" ]; then break; fi ; done The other way is to use a number format that is zero-padded: while :; do res=0x$(od -N2 -x /dev/urandom | cut -s -d' ' -f2-); echo $res; if [ -z "$res" ]; then break; fi ; done -- To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org