파일 설명자가 한 번만 열리고 읽히는 이유는 무엇입니까?

파일 설명자가 한 번만 열리고 읽히는 이유는 무엇입니까?

파일 설명자를 직접 열고 stdin으로 리디렉션할 때 왜 한 번만 사용할 수 있습니까? 제가 말하려는 내용을 이해하려면 아래 예를 살펴보시기 바랍니다. cat 명령으로 한 번 읽은 후에는 동일한 파일 설명자를 통해 두 번째로 파일을 읽지 않습니다.

└─$ exec 6< input.txt
└─$ cat <&6
i am just string
and another string..
└─$ cat <&6
└─$

답변1

파일을 인쇄하려면 먼저 cat파일을 끝까지 읽어야 합니다. exec 6< input.txt쉘이 파일 설명자를 종료하거나 닫을 때까지 파일 설명자를 유지하도록 하므로 두 번째 파일 설명자가 호출될 때 파일 오프셋은 여전히 ​​파일 끝을 가리키고 catstdout에는 아무 것도 기록되지 않습니다.

Linux 기반 시스템을 사용하는 경우 파일 설명자 정보를 보면 무슨 일이 일어나고 있는지 확인할 수 있습니다.

echo "File contents" > input.txt
exec 6< input.txt
cat "/proc/$$/fdinfo/6"
cat <&6
cat "/proc/$$/fdinfo/6"
cat <&6

스크립트를 실행하면 다음과 같은 결과가 나타납니다.

pos:    0
flags:  0100000
mnt_id: 113
File contents
pos:    14
flags:  0100000
mnt_id: 113

두 번째 실행 시 오프셋( pos)이 0이 아닌 끝을 가리키는지 확인합니다.cat

오프셋을 재설정하려면 s exec 6< input.txt사이에 다른 오프셋을 추가 하면 됩니다 cat.

관련 정보