Necesito abrir varios archivos a la vez en mi shell de Linux y, por lo tanto, pensé en pasar el valor de secuencia como valor fd como se muestra a continuación:
en mi pwd tengo archivos llamados nile.300, nile.301,....nile.500
Entonces quiero abrir nile.300 usando fd 300, nile.301 como fd 301 y así sucesivamente.
#!/bin/bash
for i in {300..500};do FILENAME=nile.$i
# Opening file descriptors # 3 for reading and writing
# i.e. /tmp/out.txt
exec $i<>$FILENAME
# Write to file
echo "Today is $(date)" >&$i
done
sleep 10;
for i in {300..500};do
# close fd # 3
exec $i>&-
done
Sin embargo, el script no se ejecuta con ./fd.sh: línea 5: exec: 300: no encontrado
Respuesta1
A menos que planee trabajar en todos los archivos abiertos al mismo tiempo, sería mejor procesar un archivo a la vez.
Este enfoque elimina la necesidad de tener cientos de archivos abiertos al mismo tiempo, lo que podría llegar al límite de archivos abiertos.
for i in {300..500};do
FILENAME=nile.$i
exec 3<>$FILENAME
# Write to file
echo "Today is $(date)" >&3
# Close
exec 3>&-
done
Respuesta2
La sintaxis correcta es {variable}
si está en el lado izquierdo:
exec {i}<>"$FILENAME"
echo "Today is $(date)" >&$i
exec {i}>&-