Proč jej lze použít pouze jednou, když sami otevřeme deskriptor souboru a přesměrujeme jej na stdin?
Podívejte se prosím na níže uvedený příklad, abyste pochopili, co chci říci. Po prvním přečtení pomocí příkazu cat se soubor podruhé nečte přes stejný deskriptor souboru.
└─$ exec 6< input.txt
└─$ cat <&6
i am just string
and another string..
└─$ cat <&6
└─$
Přijatá odpověď:
Chcete-li soubor vytisknout, první cat
musí to dočíst až do konce. exec 6< input.txt
způsobí, že shell podrží deskriptor souboru, dokud
shell nezemře nebo jej nezavře, takže offset souboru stále ukazuje na konec
souboru, když je druhý cat
je vyvoláno, což tedy do stdout nic nezapíše.
Pokud používáte systém založený na Linuxu, můžete to vidět nahlédnutím do informací o deskriptoru souboru:
echo "File contents" > input.txt
exec 6< input.txt
cat "/proc/$$/fdinfo/6"
cat <&6
cat "/proc/$$/fdinfo/6"
cat <&6
Pokud tento skript spustíte, dostanete něco jako
pos: 0
flags: 0100000
mnt_id: 113
File contents
pos: 14
flags: 0100000
mnt_id: 113
potvrzující, že offset (pos
) není 0
, když je druhý cat
se provede, ale místo toho ukazuje na svůj konec.
Pro resetování offsetu můžete přidat další exec 6< input.txt
mezi cat
s.