Why can it be used only 1 time when we open the file descriptor ourselves and redirect it to stdin?
Please take a look at the example below to understand what I want to say. After reading it once with the cat command, the file is not read via the same file descriptor for the second time.
└─$ exec 6< input.txt
└─$ cat <&6
i am just string
and another string..
└─$ cat <&6
└─$
Best Answer
To print the file, the first
cat
has to read it until the end.exec 6< input.txt
causes the shell to hold the file descriptor until the shell dies or closes it, so the file offset still points to the end of the file when the secondcat
is invoked, which thus writes nothing to stdout.If on a Linux-based system, you can see that happening by peeking into the file descriptor info:
If you execute that script, you will get something like
confirming that the offset (
pos
) is not 0 when the secondcat
is executed, but instead points to its end.To reset the offset, you can add another
exec 6< input.txt
in between thecat
s.