파일 설명자를 직접 열고 stdin으로 리디렉션할 때 왜 한 번만 사용할 수 있습니까? 제가 말하려는 내용을 이해하려면 아래 예를 살펴보시기 바랍니다. cat 명령으로 한 번 읽은 후에는 동일한 파일 설명자를 통해 두 번째로 파일을 읽지 않습니다.
└─$ exec 6< input.txt
└─$ cat <&6
i am just string
and another string..
└─$ cat <&6
└─$
답변1
파일을 인쇄하려면 먼저 cat
파일을 끝까지 읽어야 합니다.
exec 6< input.txt
쉘이 파일 설명자를 종료하거나 닫을 때까지 파일 설명자를 유지하도록 하므로 두 번째 파일 설명자가 호출될 때 파일 오프셋은 여전히 파일 끝을 가리키고 cat
stdout에는 아무 것도 기록되지 않습니다.
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
.