[shell script] 사용자 정의 입력 파일 디스크립터 만들기

HYEOB KIM·2022년 4월 26일
0

Shell

목록 보기
49/71

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 linetest 파일로부터 내용을 받아옵니다.
  • 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?가 없이 끝난 모습입니다.

profile
Devops Engineer

0개의 댓글