¿Por qué se puede usar solo 1 vez cuando abrimos el descriptor de archivo y lo redirigimos a stdin?
Mire el siguiente ejemplo para entender lo que quiero decir. Después de leerlo una vez con el comando cat, el archivo no se lee a través del mismo descriptor de archivo por segunda vez.
└─$ exec 6< input.txt
└─$ cat <&6
i am just string
and another string..
└─$ cat <&6
└─$
Respuesta aceptada:
Para imprimir el archivo, el primer cat
hay que leerlo hasta el final. exec 6< input.txt
hace que el shell contenga el descriptor del archivo hasta que el
shell muera o lo cierre, por lo que el desplazamiento del archivo aún apunta al final del archivo
cuando el segundo cat
se invoca, que por lo tanto no escribe nada en stdout.
Si está en un sistema basado en Linux, puede ver que eso sucede al mirar la información del descriptor del archivo:
echo "File contents" > input.txt
exec 6< input.txt
cat "/proc/$$/fdinfo/6"
cat <&6
cat "/proc/$$/fdinfo/6"
cat <&6
Si ejecuta ese script, obtendrá algo como
pos: 0
flags: 0100000
mnt_id: 113
File contents
pos: 14
flags: 0100000
mnt_id: 113
confirmando que el desplazamiento (pos
) no es 0
cuando el segundo cat
se ejecuta, sino que apunta a su final.
Para restablecer el desplazamiento, puede agregar otro exec 6< input.txt
entre el cat
s.