Preciso abrir vários arquivos de uma só vez no meu shell do Linux e, portanto, pensei em passar o valor da sequência como o valor fd conforme abaixo:
no meu pwd tenho arquivos nomeados como nile.300, nile.301,....nile.500
Então eu quero abrir o nile.300 usando fd 300, nile.301 como fd 301 e assim por diante
#!/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
No entanto, o script não é executado com ./fd.sh: linha 5: exec: 300: não encontrado
Responder1
A menos que você esteja planejando trabalhar em todos os arquivos abertos ao mesmo tempo, talvez seja melhor processar um arquivo de cada vez.
Essa abordagem elimina a necessidade de ter centenas de arquivos abertos ao mesmo tempo, potencialmente atingindo o limite de arquivos abertos.
for i in {300..500};do
FILENAME=nile.$i
exec 3<>$FILENAME
# Write to file
echo "Today is $(date)" >&3
# Close
exec 3>&-
done
Responder2
A sintaxe correta é {variable}
se estiver no lado esquerdo:
exec {i}<>"$FILENAME"
echo "Today is $(date)" >&$i
exec {i}>&-