3~8번 파일 디스크립터
에 입력 파일 디스크립터를 만들어봅시다.
파일로부터 내용을 입력받는데, 3~8번 파일 디스크립터를 이용하는 방법에 대해 알아보겠습니다.
아래의 코드를 봅시다.
$ cat test
Hi
My name is hyeob
Nice to meet you
$ cat test1
#!/bin/bash
exec 6<&0
exec 0<test
count=1
while read line
do
echo "Line #$count: $line"
count=$[ $count + 1 ]
done
exec 0<&6
read -p "Are you done now? " answer
case $answer in
Y | y) echo "Goodbye";;
N | n) echo "Sorry, this is the end.";;
esac
$ ./test1
Line #1: Hi
Line #2: My name is hyeob
Line #3: Nice to meet you
Are you done now? y
Goodbye
코드 리뷰
어떤 변수를 기존의 값을 잠깐 저장하는 용도로 사용하는 개념과 비슷합니다.
exec 6<&0
: 6번 파일 디스크립터가 0의 장소(키보드 입력
)를 저장하는데 사용됩니다.exec 0<test
:test
파일을0
에 리다이렉트합니다.- 이후 아래에
read line
은test
파일로부터 내용을 받아옵니다.exec 0<&6
:test
파일 안의 모든 줄을 다 읽고 나서0
을 원래 장소인 6번 파일 디스크립터의 장소(키보드 입력
)로 복원합니다.
(만약 이 코드가 없다면test
파일에서 계속read
하려고 할 것입니다)$ cat test1 #!/bin/bash exec 6<&0 exec 0<test count=1 while read line do echo "Line #$count: $line" count=$[ $count + 1 ] done read -p "Are you done now? " answer case $answer in Y | y) echo "Goodbye";; N | n) echo "Sorry, this is the end.";; esac $ ./test1 Line #1: Hi Line #2: My name is hyeob Line #3: Nice to meet you $
test
에서 더 이상 읽어 들일 내용이 없기 때문에Are you done now?
가 없이 끝난 모습입니다.