Solo para agregar a la buena respuesta de @ jw013, puede ser útil darse cuenta de que es lo mismo que
{
cat -n
cat -n
} < infile
< file
para abreviar 0< file
, es decir, usar el descriptor de archivo 0 en lugar de 3.
Y solo para confundir un poco el asunto, esta versión:
exec 3< infile
cat -n /dev/fd/3
cat -n /dev/fd/3
Se comporta de manera diferente según el sistema operativo en el que lo ejecute y el tipo de infile
(archivo normal vs tubería vs dispositivo ...)
En Solaris y en la mayoría de las unidades comerciales, un open("/dev/fd/3")
es más o menos equivalente a un dup(3)
(por lo que < /dev/fd/3
es casi lo mismo que <&3
), mientras que en Linux, para archivos normales, /dev/fd/3
se implementa como un enlace simbólico al archivo original, por lo que se open("/dev/fd/3")
abre de nuevo desde el principio ( y posiblemente con diferentes banderas del fd 3).