That's not a _<
operator, that's a _
argument to pass to read and the <
redirection operator. <(cmd)
itself is process subtitution (that expands to a filename that points to a pipe).
What that does is run:
read bytes _ < /proc/self/fd/x
Where the fd x is the reading end of a pipe.
At the other (writing) end of the pipe, a background subshell process is executing du -bcm random_iso.iso | tail -1
with its stdout redirected to that pipe.
So read
will store in the $bytes
variable the first word of the last line of the output of du -bcm
, and the rest of the line in the $_
variable.
Now I don't know where that du -bcm
makes sense. None of -b
, -c
nor -m
options are standard. While -c
is quite common and is for giving the cumulative size, with GNU du
, -b
is to get the file size (not disk usage) in bytes, while -m
is to get the size rounded up to the next mebibyte so they would be conflicting options (though maybe they used -b
for its side-effect of enabling --apparent-size
). FreeBSD du has -m
(for mebibytes), no -b
, Solaris has neither...
It looks like it was meant as a convoluted way to write:
wc -c < random_iso.iso
Or:
du --apparent-size -cm random_iso.iso | awk 'END{print $1}'
If they indeed wanted the file size rounded up to the next mebibyte on a GNU system.