Linux 셸에서 한 번에 여러 파일을 열어야 하므로 시퀀스 값을 아래와 같이 fd 값으로 전달하는 것을 생각했습니다.
내 비밀번호에는 nile.300, nile.301,....nile.500이라는 파일이 있습니다.
그래서 fd 300을 사용하여 nile.300을 열고, nile.301을 fd 301로 열고 싶습니다.
#!/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
그러나 스크립트는 ./fd.sh: line 5: exec: 300: notfound로 실행되지 않습니다.
답변1
열려 있는 모든 파일을 동시에 작업할 계획이 아니라면 한 번에 하나의 파일을 처리하는 것이 더 나을 수 있습니다.
이 접근 방식을 사용하면 동시에 수백 개의 파일을 열어야 할 필요성이 없어져 잠재적으로 열린 파일 제한에 도달할 수 있습니다.
for i in {300..500};do
FILENAME=nile.$i
exec 3<>$FILENAME
# Write to file
echo "Today is $(date)" >&3
# Close
exec 3>&-
done
답변2
올바른 구문은 {variable}
왼쪽에 있는 경우입니다.
exec {i}<>"$FILENAME"
echo "Today is $(date)" >&$i
exec {i}>&-