#!/bin/sh
#
# Deskriptor-Manipulationen in der Bash
#
# 5.9.2008

# die folgenden beiden read-Kommandos lesen 2 Mal die erste (und damit
# dieselbe) Zeile aus $file, da durch die getrennten Umlenkungen die Datei 2
# Mal separat geöffnet wird
file=/etc/services
read -r < $file ; echo "$REPLY"
read -r < $file ; echo "$REPLY"

echo '====='
# die ersten 10 Zeilen aus $file einlesen und mit vorangestellter Zeilennummer
# ausgeben
for ((i = 0; i < 10; i++))
{
  read -r ; echo "$i: $REPLY"
} < $file

echo '====='
# $file unter FD (File-Deskriptor) 3 zum Lesen öffnen
exec 3< $file
# die ersten beiden Zeilen von FD 3 lesen und ausgeben; für den Zugriff auf den
# Deskriptor 3 nutzt Variante 1 die Eingabe-Umlenkung und Variante 2 die Option
# -u von read
read -r <&3 ; echo "$REPLY"
read -r -u 3 ; echo "$REPLY"
# FD 3 wieder schließen
exec 3<&-

echo '====='
# FD 0 nach FD 3 duplizieren und $file unter FD 0 öffnen
exec 3<&0 < $file
# die ersten beiden Zeilen von FD 0 lesen
read -r ; echo "$REPLY"
read -r ; echo "$REPLY"

echo '====='
# FD 3 (Kopie des alten FD 0) nach FD 0 verschieben und FD 3 schließen
exec <&3-
# noch eine Zeile vom alten (beim Start des Skripts aktuellen) FD 0 lesen
read -r ; echo "$REPLY"

